• Like
  • Save
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
Upcoming SlideShare
Loading in...5
×
 

どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013

on

  • 8,297 views

 

Statistics

Views

Total Views
8,297
Views on SlideShare
4,566
Embed Views
3,731

Actions

Likes
15
Downloads
19
Comments
0

9 Embeds 3,731

http://d.hatena.ne.jp 3437
https://twitter.com 230
http://feedly.com 50
http://hatenatunnel.appspot.com 7
http://inoreader.com 2
http://www.hatenatunnel.appspot.com 2
http://tweetedtimes.com 1
http://www.feedspot.com 1
https://translate.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013 どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013 Presentation Transcript

    • どの言語でつぶやかれたのか、 機械が知る方法 2013/11/28 WebDB Forum 2013 中谷 秀洋@サイボウズ・ラボ @shuyo / id:n_shuyo
    • twitter の利用言語割合 言語 英語 日本語 スペイン語 マレー語/インドネシア語 アラビア語 ポルトガル語 トルコ語 ロシア語 フランス語 フィリピン語(タガログ語) タイ語 韓国語 イタリア語 フィンランド語 オランダ語 ドイツ語 割合 37.5% 16.0% 9.7% 7.0% 6.4% 4.0% 2.6% 2.4% 1.8% 1.7% 1.2% 1.1% 1.0% 0.7% 0.7% 0.5% • ターゲットは日本語だ けでいいの? – 残り 84% が対象外 (自社調べ、2013/11 現在) 6
    • 本発表の方針 • SNS (twitter や facebook) について – 多言語に渡るサービスや研究をしたいとき – 知ってて嬉しいテキスト表現の知見を紹介 • 正書法が通じると思ったら大間違い! • 成果物やそのモデルについては最低限 7
    • 言語判定 8
    • ある日こんなメールが • 読めない…… 9
    • 困ったときの Google 先生 • ポーランド語のスパムでした。 10
    • そういえば 迷惑メールフォルダに入ってた • でもなぜスパムだとわかったの? 11
    • スパムフィルタ • 「スパムっぽい単語」があると スパム確率up • フィルタは言語ごとに必要 無料 バイアグラ オオアリクイ : free mastercard account : 日本語用フィルタ 英語用フィルタ ※ベイジアンフィルタなどを利用したモデルの場合。 他にルールベース(ホワイト&ブラックリスト)のアプローチなどもあります 12
    • 言語判定とは • 入力テキストの記述言語を推定 – Time fries like arrow → 英語 – Buona sera! → イタリア語 • 多くの言語処理での前提タスク – 言語モデルは言語ごとに構築 – 検索、分類、抽出、翻訳、…… • 言語判定を間違えると、後も全部こける! 13
    • ニューステキストに対する言語判定 (後述する langdetect による評価) af ar bg bn cs da de el en es fa fi fr gu he hi hr hu id it ja kn ko mk ml 言語 データ件数 正解数(率) 内訳 言語 mr マラーティー語 アフリカーンス語 200 199 (99.50%) en=1, af=199 アラビア語 200 200 (100.00%) ar=200 ne ネパール語 オランダ語 ブルガリア語 200 200 (100.00%) bg=200nl no ノルウェー語 ベンガル語 200 200 (100.00%) bn=200 チェコ語 200 200 (100.00%) cs=200 pa パンジャーブ語 pl ポーランド語 デンマーク語 200 179 (89.50%) da=179, no=14, en=7 ドイツ語 200 200 (100.00%) de=200 pt ポルトガル語 ルーマニア語 ギリシア語 200 200 (100.00%) el=200ro 英語 200 200 (100.00%) en=200 ru ロシア語 sk スロバキア語 スペイン語 200 200 (100.00%) es=200 ペルシア語 200 200 (100.00%) fa=200so ソマリ語 フィンランド語 200 200 (100.00%) fi=200 sq アルバニア語 スウェーデン語 フランス語 200 200 (100.00%) fr=200sv グジャラート語 200 200 (100.00%) gu=200 sw スワヒリ語 ta タミル語 ヘブライ語 200 200 (100.00%) he=200 テルグ語 ヒンディー語 200 200 (100.00%) hi=200te クロアチア語 200 200 (100.00%) hr=200th タイ語 tl タガログ語 ハンガリー語 200 200 (100.00%) hu=200 トルコ語 インドネシア語 200 200 (100.00%) id=200 tr イタリア語 200 200 (100.00%) it=200 uk ウクライナ語 ウルドゥー語 日本語 200 200 (100.00%) ja=200 ur vi ベトナム語 カンナダ語 200 200 (100.00%) kn=200 zh-cn 中国語(簡体字) 朝鮮語(韓国語) 200 200 (100.00%) ko=200 zh-tw 中国語(繁体字) マケドニア語 200 200 (100.00%) mk=200 マラヤーラム語 200 200 (100.00%) ml=200 合計 ∞-gram を使った短文言語判定 (確率 データ件数 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 9800 正解数(率) 200 (100.00%) 200 (100.00%) 200 (100.00%) 199 (99.50%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 200 (100.00%) 9777 (99.77%) 14 mr=2 ne=2 nl=20 da=1 pa=2 pl=20 pt=2 ro=2 ru=2 sk=2 so=2 sq=2 sv=2 sw=2 ta=2 te=2 th=2 tl=20 tr=20 uk=2 ur=2 vi=20 zh-c zh-t
    • 言語判定は「単純なテキスト分類問題」 • 十分長い&低ノイズなテキストに対し 99%以上の精度 [Cavnar+ 94] – ナイーブベイズ+文字3-gram による簡易な 実装だけでも 90% くらい出る • 言語判定はオワコン? – 研究的にはもしかしたらそうかも – でも実用面ではまだまだがんばらないと! 15
    • ツイートを言語判定すると ca cs da de en es fi fr hu id it nl no pl pt ro sv tr vi 言語 カタルーニャ語 チェコ語 デンマーク語 ドイツ語 英語 スペイン語 フィンランド語 フランス語 ハンガリー語 インドネシア語 イタリア語 オランダ語 ノルウェー語 ポーランド語 ポルトガル語 ルーマニア語 スウェーデン語 トルコ語 ベトナム語 計 LD 95.3 96.3 94.5 86.6 88.3 91.5 98.9 95.0 85.8 89.7 96.2 69.5 96.0 98.0 88.0 92.8 96.0 97.6 98.7 92.2 CLD 93.0 96.6 90.7 96.8 97.4 90.5 99.4 94.5 89.0 92.8 93.8 93.2 74.9 97.8 88.6 96.1 96.4 97.4 98.9 93.8 Tika 83.8 ---58.7 73.1 54.7 44.4 94.8 67.4 76.2 ---87.1 65.0 68.6 88.8 47.4 82.6 75.6 ------70.0 • 精度は 90~95% • LD = language-detection • CLD = Chromium Compact Language Detection – http://code.google.com/p/chromiu m-compact-language-detector/ • Tika = Apache Tika – http://tika.apache.org/ – 対応している15言語のみ評価 16
    • twitter言語判定は難しい • テキスト長が短い – twitter は最大140字、多くは十数~数十字以下 – 3-gram ではわずかな素性しか取り出せない – ★短文から豊富な素性を抽出できるモデルが必要 • ノイズが多い – 正書法から外れた表現(省略語、短縮語、繰り返し) – 通常の言語モデルに当てはめると尤度が小さい – ★ノイズクリーニング&専用のコーパスが必要 17
    • 精度 90% もあれば十分? • 実用には厳しい – 10個に1個間違う – 95% でも、20個に1個間違う • 特に言語判定はがんばらないと – 様々な言語処理の前提タスク • 言語判定を間違えると、後も全部こける! – 精度99%は欲しい 18
    • 言語判定の成果 19
    • モデルの話とか始めると 長くなるのでざっくりと ※モデルについては http://www.slideshare.net/shuyo/short-textlanguage-detection-with-infinitygram-12949447 などで解説しています 20
    • language-detection(langdetect) (中谷 2010) • 言語判定 Java ライブラリ – http://code.google.com/p/language-detection/ – オープンソース (Apache License 2.0) – 文字 3-gram + ベイジアンフィルタ – 各種正規化+特徴のサンプリング • 53言語について 99% 以上の精度で判定 – 対象は新聞記事など「ある程度長く整った文章」 – アジア圏の言語にも広く対応 – Apache Solr など、多くの製品・研究に利用 21
    • ldig プロトタイプ (Language Detection with Infinity-Gram) • ラテン文字ツイートの言語判定器 – 19言語ツイートコーパスを作成し、学習 • Python 実装 – https://github.com/shuyo/ldig – オープンソース (MIT license) – 学習済みモデルも同 URL にて配布 • ∞-gram 多クラスロジスティック回帰 – 極大部分文字列[岡野原+ 08] – L1 SGD (Cumulative Penalty) [Tsuruoka+ 09] – Double Array 22
    • ldigcpp • ldig の C++ 実装 – https://github.com/shuyo/ldig/tree/cpp/ldigcpp • 公開準備中(ドキュメント未整備) – めざせ! 脱プロトタイプ • ラテン文字以外も対応 – 50言語ツイートコーパス(約 48万件) – その他、細かい改良 23
    • コーパス作り(イメージ図) 24
    • 評価 on ldigcpp # code 言語 1 ar アラビア語 2 ar-bz Arabizi 3 bg ブルガリア語 4 bn ベンガル語 5 ca カタルーニャ語 6 cs チェコ語 7 da デンマーク語 8 de ドイツ語 9 dv ディベヒ語 10 el ギリシャ語 11 en 英語 12 es スペイン語 13 et エストニア語 14 fa ペルシャ語 15 fi フィンランド語 16 fr フランス語 17 gu グルジア語 18 he ヘブライ語 19 hi ヒンディー語 20 hr クロアチア語 21 hu ハンガリー語 22 id インドネシア語 23 it イタリア語 24 ja 日本語 25 ko 韓国語 訓練 テスト 9,939 1,981 192 31 9,540 1,864 9,993 1,814 8,202 1,240 10,315 1,930 10,251 1,905 10,130 1,809 978 102 9,442 1,889 10,269 2,032 10,371 2,056 2,067 543 9,904 1,965 9,702 2,055 9,927 2,042 1,547 106 9,705 1,950 9,956 1,821 8,624 1,923 9,811 1,959 9,903 1,974 10,283 1,988 9,916 1,968 9,906 1,976 正解 1,976 23 1,819 1,791 1,227 1,916 1,859 1,802 102 1,888 1,988 2,016 529 1,956 2,036 2,010 105 1,950 1,817 1,880 1,939 1,951 1,982 1,967 1,974 精度 0.997 0.742 0.976 0.987 0.990 0.993 0.976 0.996 1.000 0.999 0.978 0.981 0.974 0.995 0.991 0.984 0.991 1.000 0.998 0.978 0.990 0.988 0.997 0.999 0.999 # c ode 26 lt 27 lv 28 mk 29 ml 30 mn 31 nl 32 no 33 pa 34 pl 35 pt 36 ro 37 ru 38 si 39 sq 40 sv 41 ta 42 te 43 th 44 tl 45 tr 46 uk 47 ur 48 vi 49 zh-cn 50 zh-tw 言語 リトアニア語 ラトヴィア語 マケドニア語 マラヤーラム語 モンゴル語 オランダ語 ノルウェー語 パンジャーブ語 ポーランド語 ポルトガル語 ルーマニア語 ロシア語 シンハラ語 アルバニア語 スウェーデン語 タミル語 テルグ語 タイ語 タガログ語 トルコ語 ウクライナ語 ウルドゥー語 ベトナム語 中国語(簡体字) 中国語(繁体字) total 訓練 テス ト 6,855 1,001 3,651 1,158 6,654 1,340 7,103 996 120 28 9,840 1,964 9,673 1,896 1,550 201 10,186 1,722 9,301 1,893 9,571 1,924 10,186 1,953 4,114 671 2,432 421 9,451 1,853 9,949 2,084 1,795 303 8,993 1,761 9,910 1,954 9,698 1,928 9,929 2,168 9,037 1,003 9,815 1,948 9,790 1,840 9,878 1,825 400,354 76,758 正解 994 1,144 1,323 996 28 1,939 1,838 201 1,717 1,869 1,909 1,937 670 414 1,828 2,084 302 1,761 1,935 1,918 2,020 1,003 1,930 1,816 1,816 75,895 精度 0.993 0.988 0.987 1.000 1.000 0.987 0.969 1.000 0.997 0.987 0.992 0.992 0.999 0.983 0.987 1.000 0.997 1.000 0.990 0.995 0.932 1.000 0.991 0.987 0.995 0.989 25
    • ブカレスト市内の看板(Google Streat View より) SNS・チャット特有のテキスト表現 26
    • キーワードは 「易きに流れる」 27
    • 突然ですが 問題です 28
    • 何語のつぶやきでしょうか? t9b7en 3la khair • ヒント – 実際のツイートです – 2億以上の話者がいるメジャーな言語です 29
    • t9b7en 3la khair t 9 b 7 e n 3 l a kh ai r Arabizi にしたがって変換 ‫ى ل ع ن ي ح ب ص ت‬ アラビア文字 は右から左に ‫خ‬ ‫تصبحين على خير‬ “Good night” ‫ر ي‬ アラビア語 30
    • Arabizi (Arabic Chat Alphabet) • アラビア文字をアルファベット+数字で置き換え – http://en.wikipedia.org/wiki/Arabic_chat_alphabet (Wikipedia より) 31
    • Arabizi は90年代に誕生 • PC/スマホの普及にともない利用拡大 – 入力だけではなく Arabizi で読み書きを • 「Arabizi はアラビア語を破壊しつつある」 – 学生「Arabizi に慣れたらアラビア文字で書けな くなってきた。レポートなどを書くときは一度 Arabizi で書いてからアラビア文字に変換」 – http://www.arabnews.com/node/374897 • 英単語混じりのアラビア語ツイートが! 入力/記述コストの低い方へ低い方へ 32
    • アクセントの省略 • ascii アルファベット以外は入力しにくい – ラテン文字言語ほぼ全般で発生 – スペイン語、クロアチア語、…… • 例:リトアニア語 “eik is cia” – 正しくは “eik iš čia” (go from here) • 例:一人称単数代名詞の主格 – チェコ語は “já”、スロバキア語は “ja” – アクセント記号を省略された日には…… 33
    • 文字の代替 • 入力しやすい別の文字で置き換え • 例:ドイツ語の “ß” – スイス以外でも “SS” に置き換えられる • 例:モンゴル語 – キリル文字だがロシア語にない文字が2つある – そのうちの1つ “ү”(U+04af) を “v”(U+0076) で表す • 例:ルーマニア語 – 正書法の定める “ș”, “ț” より “ş”, “ţ” が多く使われる • 例:ペルシャ語の ‫( ی‬U+06cc, Farsi yeh) – ‫( ي‬U+064a, Arabic yeh)が使われる 34
    • Twitter での「笑い」 • 綴りは言語によっていろいろ – HOW MUCH DO YOU LOVE COACH BEISTE??? HHAHAHAHAHAH – Hihihihi. :) Habe ich regulär 2x die Woche! – Tafil con eso...!!! Jajajajajajaja – Malo?? Jejejeje XP – หน้ าพาไม่ซึ ้งเหรอ 5555555555555 กูติสต้ องเข้ าใจ • タイ語の 5 の読みは「ハー」(๕) – Ахаха )) ось чому я її ніколи не любила • でも基本は世界中で「(ア)ハハハ」でほぼ共通の音 – 「(イ)ヒヒ」「(エ)ヘヘ」「カカカ」「ククク」なども – なぜか日本だけ「ちょwwwwwおまwwwwww」 ※ http://en.wikipedia.org/wiki/LOL に各国語の笑い表現がまとめられている 39
    • まとめ • 「易きに流れる」 – SNS テキストが正書法の通りだと思ったら大間違い – これらの知識で正規化→単語共起などもより正確に • 実用化とは – ギリギリの精度を叩き出すためになんでもやる • 自動でやれることには限界がある – ライバルは自分? • 「先行研究」がない領域 40
    • References • [中谷 NLP12]極大部分文字列を使った twitter 言語判定 • [岡野原+ 08] 全ての部分文字列を考慮した文書分類 • ニューエクスプレスシリーズ(白水社) – スウェーデン語、ノルウェー語、デンマーク語、ポーランド語、 ハンガリー語、ルーマニア語、チェコ語、リトアニア語、スペ イン語、カタルーニャ語、ベトナム語、トルコ語、ドイツ語、 オランダ語、マレー語、セルビア語・クロアチア語、他 • [Cavnar+ 94] N-Gram-Based Text Categorization • [Tsuruoka+ 09] Stochastic Gradient Descent Training for L1-regularized Log-linear Models with Cumulative Penalty 41