ソーシャルメディアの多言語判定 #SoC2014
Upcoming SlideShare
Loading in...5
×
 

ソーシャルメディアの多言語判定 #SoC2014

on

  • 2,368 views

第5回ソーシャルコンピューティングシンポジウム(SoC2014) にて招待講演をさせていただいたときの発表資料です。

第5回ソーシャルコンピューティングシンポジウム(SoC2014) にて招待講演をさせていただいたときの発表資料です。

Statistics

Views

Total Views
2,368
Slideshare-icon Views on SlideShare
2,030
Embed Views
338

Actions

Likes
7
Downloads
7
Comments
0

2 Embeds 338

https://twitter.com 329
http://s.deeeki.com 9

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

    ソーシャルメディアの多言語判定 #SoC2014 ソーシャルメディアの多言語判定 #SoC2014 Presentation Transcript

    • ソーシャルメディアの多言語判定 2014/6/21 SoC2014 中谷 秀洋 サイボウズ・ラボ株式会社
    • サイボウズの紹介 2
    • サイボウズ株式会社 • 企業内外のコラボレーションを促進するソフト ウェアを提供、そのための技術開発を行う – サイボウズ Office / ガルーン • 企業内グループウェア – サイボウズ Live • 企業間・個人向けグループウェア – kintone • Web画面でアプリ開発できる SaaS プラットフォーム – cybozu.com • 自社クラウドサービス
    • 自社クラウドを支える技術 • yrmcds – レプリケーション機能と サーバーサイドロック機能 を持つ memcached 互換な KVS – 2条項 BSD ライセンスで公開 – http://cybozu.github.io/yrmcds/ 4 レプリケーション機能を用いた 無停止アップグレード
    • 自社クラウドを支える技術 • WalB – 任意のファイルシステムをオンラインバックアップ可能に する Linux のログ先行書き込みブロックデバイスドライバ – GPL v2/v3 ライセンスで公開 – https://github.com/starpos/walb/ 5 WalB のアーキテクチャ
    • はじめに 6
    • twitter の利用言語割合 • ツイートを使った研究・ サービスをしたい – ターゲットは日本語 だけでいい? – 残り 84% が対象外 7 (自社調べ、2013/11 現在) 言語 割合 英語 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%
    • 本発表の内容 • 言語判定 – テキストが書かれた言語を推定する技術と 開発したライブラリの紹介 • 多言語のテキスト表現に関する知見 – 言語判定を通じて得たもの – 多言語に渡るサービスや研究にあたって知っ てて嬉しい • 正書法が通じると思ったら大間違い! 8
    • 言語判定 9
    • ある日こんなメールが 10 • 読めない……
    • 困ったときの Google 先生 • ポーランド語のスパムでした。 11
    • そういえば 迷惑メールフォルダに入っていた 12 • でもなぜスパムだとわかったのだろう?
    • スパムフィルタ • 「スパムっぽい単語」→スパム確率up(※ • フィルタは言語ごとに必要 – 英語のスパムを判定するには、 まず英語であることを知らなければならない 13 無料 バイアグラ オオアリクイ : free mastercard account : 英語用フィルタ日本語用フィルタ ※ベイジアンフィルタなどを利用したモデルの場合。 他にルールベース(ホワイト&ブラックリスト)のアプローチなどもあります
    • 言語判定とは • 入力テキストの記述言語を推定 – Time fries like arrow → 英語 – Buona sera! → イタリア語 • 多くの言語処理での前提タスク – 言語モデルは言語ごとに構築されるため – 検索、分類、抽出、翻訳、…… • もともとグループウェアの検索機能に言語の絞り 込みを付加するために開発した 14
    • ニューステキストに対する言語判定 (後述する langdetect による評価) 15 言語 データ件数 正解数(率) 内訳 af アフリカーンス語 200 199 (99.50%) en=1, af=199 ar アラビア語 200 200 (100.00%) ar=200 bg ブルガリア語 200 200 (100.00%) bg=200 bn ベンガル語 200 200 (100.00%) bn=200 cs チェコ語 200 200 (100.00%) cs=200 da デンマーク語 200 179 (89.50%) da=179, no=14, en=7 de ドイツ語 200 200 (100.00%) de=200 el ギリシア語 200 200 (100.00%) el=200 en 英語 200 200 (100.00%) en=200 es スペイン語 200 200 (100.00%) es=200 fa ペルシア語 200 200 (100.00%) fa=200 fi フィンランド語 200 200 (100.00%) fi=200 fr フランス語 200 200 (100.00%) fr=200 gu グジャラート語 200 200 (100.00%) gu=200 he ヘブライ語 200 200 (100.00%) he=200 hi ヒンディー語 200 200 (100.00%) hi=200 hr クロアチア語 200 200 (100.00%) hr=200 hu ハンガリー語 200 200 (100.00%) hu=200 id インドネシア語 200 200 (100.00%) id=200 it イタリア語 200 200 (100.00%) it=200 ja 日本語 200 200 (100.00%) ja=200 kn カンナダ語 200 200 (100.00%) kn=200 ko 朝鮮語(韓国語) 200 200 (100.00%) ko=200 mk マケドニア語 200 200 (100.00%) mk=200 ml マラヤーラム語 200 200 (100.00%) ml=200 言語 データ件数 正解数(率) mr マラーティー語 200 200 (100.00%) mr=2 ne ネパール語 200 200 (100.00%) ne=2 nl オランダ語 200 200 (100.00%) nl=20 no ノルウェー語 200 199 (99.50%) da=1 pa パンジャーブ語 200 200 (100.00%) pa=2 pl ポーランド語 200 200 (100.00%) pl=20 pt ポルトガル語 200 200 (100.00%) pt=2 ro ルーマニア語 200 200 (100.00%) ro=2 ru ロシア語 200 200 (100.00%) ru=2 sk スロバキア語 200 200 (100.00%) sk=2 so ソマリ語 200 200 (100.00%) so=2 sq アルバニア語 200 200 (100.00%) sq=2 sv スウェーデン語 200 200 (100.00%) sv=2 sw スワヒリ語 200 200 (100.00%) sw=2 ta タミル語 200 200 (100.00%) ta=2 te テルグ語 200 200 (100.00%) te=2 th タイ語 200 200 (100.00%) th=2 tl タガログ語 200 200 (100.00%) tl=20 tr トルコ語 200 200 (100.00%) tr=20 uk ウクライナ語 200 200 (100.00%) uk=2 ur ウルドゥー語 200 200 (100.00%) ur=2 vi ベトナム語 200 200 (100.00%) vi=20 zh-cn 中国語(簡体字) 200 200 (100.00%) zh-c zh-tw 中国語(繁体字) 200 200 (100.00%) zh-t 合計 9800 9777 (99.77%)
    • 言語判定は「単純なテキスト分類問題」 • 十分長い&低ノイズなテキストに対し 99%以上の精度 [Cavnar+ 94] – 簡易な実装でも十分高い精度が出る • 言語判定はオワコン? – 研究的にはもしかしたらそうかも – でも実用面ではまだまだ課題多し! 16
    • ツイートを言語判定すると • 精度は 90~95% – 10~20件に1つ間 違い • 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言語のみ評価 言語 LD CLD Tika ca カタルーニャ語 95.3 93.0 83.8 cs チェコ語 96.3 96.6 ---- da デンマーク語 94.5 90.7 58.7 de ドイツ語 86.6 96.8 73.1 en 英語 88.3 97.4 54.7 es スペイン語 91.5 90.5 44.4 fi フィンランド語 98.9 99.4 94.8 fr フランス語 95.0 94.5 67.4 hu ハンガリー語 85.8 89.0 76.2 id インドネシア語 89.7 92.8 ---- it イタリア語 96.2 93.8 87.1 nl オランダ語 69.5 93.2 65.0 no ノルウェー語 96.0 74.9 68.6 pl ポーランド語 98.0 97.8 88.8 pt ポルトガル語 88.0 88.6 47.4 ro ルーマニア語 92.8 96.1 82.6 sv スウェーデン語 96.0 96.4 75.6 tr トルコ語 97.6 97.4 ---- vi ベトナム語 98.7 98.9 ---- 計 92.2 93.8 70.0 17
    • 精度 90% もあれば十分? • 実用には厳しい – 10個に1個間違い – 95% でも、20個に1個間違い • 多くの言語処理の前提タスク – 言語判定を間違えると、後も全部失敗! – 例:ポーランド語スパムに英語フィルタを使う • 言語判定は高い精度が求められる – 少なくとも精度 99%は欲しい 18
    • SNS/チャット 言語判定の難しさ • テキスト長が短い – twitter は最大140字、多くは十数~数十字以下 – 3-gram ではわずかな素性しか取り出せない – ★短文から豊富な素性を抽出できるモデルが必要 • ノイズが多い – 正書法から外れた表現(省略語、短縮語、繰り返し) – 通常の言語モデルに当てはめると尤度が小さい – ★ノイズクリーニング&専用のコーパスが必要 19
    • 言語判定ソフトウェア 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) [中谷 NLP2012] • ラテン文字ツイートの言語判定器 – 19言語ツイートコーパスを作成し、学習 • Python 実装 – https://github.com/shuyo/ldig – 学習済みモデルも配布 • C++ 実装 – https://github.com/shuyo/ldig/tree/cpp/ldigcpp • ドキュメント未整備 – ラテン文字言語以外にも対応 – 50言語ツイートコーパスを作成し、学習 22
    • twitter 言語判定のモデル • 極大部分文字列を使ったロジスティック回帰 [岡野原+ 08] – 全ての部分文字列を特徴量とする(∞-gram) – ツイートのような短い文字列でも、 n-gram より多くの特徴量が得られる – 詳細は http://www.slideshare.net/shuyo/short-text- language-detection-with-infinitygram-12949447 等を参照 23via http://d.hatena.ne.jp/nokuno/20120203/1328237067
    • コーパス • twitter 特有の表現が多い – 専用のコーパスが必要だが、十分な量が無い – 自分で作るしか • ツイート収集 – twitter Streaming API の sample メソッド (約200万件/日) • ツイートに言語ラベルを振る – 50言語 約30万件 24
    • コーパス作り(イメージ図) 25
    • 50言語のツイートを 約 99% の精度で判定 26 # code 言語 訓練 テスト 正解 精度 1 ar アラビア語 9,939 1,981 1,976 0.997 2 ar-bz Arabizi 192 31 23 0.742 3 bg ブルガリア語 9,540 1,864 1,819 0.976 4 bn ベンガル語 9,993 1,814 1,791 0.987 5 ca カタルーニャ語 8,202 1,240 1,227 0.990 6 cs チェコ語 10,315 1,930 1,916 0.993 7 da デンマーク語 10,251 1,905 1,859 0.976 8 de ドイツ語 10,130 1,809 1,802 0.996 9 dv ディベヒ語 978 102 102 1.000 10 el ギリシャ語 9,442 1,889 1,888 0.999 11 en 英語 10,269 2,032 1,988 0.978 12 es スペイン語 10,371 2,056 2,016 0.981 13 et エストニア語 2,067 543 529 0.974 14 fa ペルシャ語 9,904 1,965 1,956 0.995 15 fi フィンランド語 9,702 2,055 2,036 0.991 16 fr フランス語 9,927 2,042 2,010 0.984 17 gu グルジア語 1,547 106 105 0.991 18 he ヘブライ語 9,705 1,950 1,950 1.000 19 hi ヒンディー語 9,956 1,821 1,817 0.998 20 hr クロアチア語 8,624 1,923 1,880 0.978 21 hu ハンガリー語 9,811 1,959 1,939 0.990 22 id インドネシア語 9,903 1,974 1,951 0.988 23 it イタリア語 10,283 1,988 1,982 0.997 24 ja 日本語 9,916 1,968 1,967 0.999 25 ko 韓国語 9,906 1,976 1,974 0.999 # code 言語 訓練 テスト 正解 精度 26 lt リトアニア語 6,855 1,001 994 0.993 27 lv ラトヴィア語 3,651 1,158 1,144 0.988 28 mk マケドニア語 6,654 1,340 1,323 0.987 29 ml マラヤーラム語 7,103 996 996 1.000 30 mn モンゴル語 120 28 28 1.000 31 nl オランダ語 9,840 1,964 1,939 0.987 32 no ノルウェー語 9,673 1,896 1,838 0.969 33 pa パンジャーブ語 1,550 201 201 1.000 34 pl ポーランド語 10,186 1,722 1,717 0.997 35 pt ポルトガル語 9,301 1,893 1,869 0.987 36 ro ルーマニア語 9,571 1,924 1,909 0.992 37 ru ロシア語 10,186 1,953 1,937 0.992 38 si シンハラ語 4,114 671 670 0.999 39 sq アルバニア語 2,432 421 414 0.983 40 sv スウェーデン語 9,451 1,853 1,828 0.987 41 ta タミル語 9,949 2,084 2,084 1.000 42 te テルグ語 1,795 303 302 0.997 43 th タイ語 8,993 1,761 1,761 1.000 44 tl タガログ語 9,910 1,954 1,935 0.990 45 tr トルコ語 9,698 1,928 1,918 0.995 46 uk ウクライナ語 9,929 2,168 2,020 0.932 47 ur ウルドゥー語 9,037 1,003 1,003 1.000 48 vi ベトナム語 9,815 1,948 1,930 0.991 49 zh-cn 中国語(簡体字) 9,790 1,840 1,816 0.987 50 zh-tw 中国語(繁体字) 9,878 1,825 1,816 0.995 total 400,354 76,758 75,895 0.989
    • SNS・チャット特有のテキスト表現 27 ブカレスト市内の看板(Google Streat View より)
    • 何語のつぶやきでしょうか? • ヒント – 実際のツイートです – 2億以上の話者がいるメジャーな言語です 28 t9b7en 3la khair
    • 29 t9b7en 3la khair t 9 b 7 e n 3 l a kh ai r ‫ت‬ ‫ص‬ ‫ب‬ ‫ح‬ ‫ي‬ ‫ن‬ ‫ع‬ ‫ل‬ ‫ى‬ ‫خ‬ ‫ي‬ ‫ر‬ ‫خير‬ ‫على‬ ‫تصبحين‬ “Good night” アラビア語 アラビア文字 は右から左に Arabizi にしたがって変換
    • Arabizi (Arabic Chat Alphabet) • アラビア文字をアルファベット+数字で置き換え – http://en.wikipedia.org/wiki/Arabic_chat_alphabet 30 (Wikipedia より)
    • Arabizi は90年代に誕生 • PC/スマホの普及にともない利用拡大 – 入力だけではなく Arabizi で読み書きを • 「Arabizi はアラビア語を破壊しつつある」 – 学生「Arabizi に慣れたらアラビア文字で書けな くなってきた。レポートなどを書くときは一度 Arabizi で書いてからアラビア文字に変換」 – http://www.arabnews.com/node/374897 • 英単語混じりのアラビア語ツイートが! 31 入力/記述コストの低い方へ
    • チェコ語 / スロバキア語 • 系統上 非常に近い兄弟言語 – 話者同士の意思疎通が可能 • ニューステキストなどの判別は容易(ほぼ 100% の精度) – チェコ語でのみ使う文字 : ĚŘŮ – スロバキア語でのみ使う文字 : ÄĹĽÔŔ – 異なる機能語も少なくない • 例:代名詞の一人称単数主格形 • チェコ語は “já”、スロバキア語は “ja” 32
    • アクセントの省略 • 入力しにくい記号付きアルファベット – ÁÉÍÓÚÜ(スペイン語)、ÇĞİÖŞÜ(トルコ語)、… – ツイートではアクセントのない文字で代用が • チェコ語/スロバキア語の一人称 – “já” / “ja” → どちらも “ja” に – 言語判別が非常に難しい(80%台まで下がる) • 他の例: “eik iš čia” (リトアニア語: go from here) – “eik is cia” となり、他の言語に判定される 33
    • その他の文字の代替 (1) • ドイツ語 – “ß” : エスツェット、スイス-ドイツ語では “ss” を使う – 入力しにくいため、ドイツでも “ss” に • ルーマニア語 – 正書法の定める “ș”, “ț” より “ş”, “ţ” を多用 – OS などによるサポートが遅かったため、 ネットに限らず印刷物や看板などでも代用率 が高い 34
    • ブカレストまで行って探してきた (Google Street View で) • 街中の看板にも代用字(セディーユ付き)が使われている 35
    • その他の文字の代替 (2) • ペルシャ語 – ‫ی‬ (U+06cc, Farsi yeh) の代わりに ‫(ي‬U+064a, Arabic yeh)が使われる – これも文字コード由来のため、SNS以外でも新聞など多く のメディアで発生している • モンゴル語 – 本来はモンゴル文字(縦書き)だが、キリル文字が広く使わ れる(ネットでは特に) – ロシア語のキリル文字とほぼ共通だが、 2つの独自文字の うち “ү”(U+04af) が “v”(U+0076) で置き換えられる 36
    • 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」 37※ http://en.wikipedia.org/wiki/LOL に各国語の笑い表現がまとめられている
    • 文字を重ねる表現の取り扱い • coooooooollllll、たっっっっぷり のように強調の ために同じ文字を重ねる表現 • 対策案1: [Brody+ 2011] で正規化辞書を作る – cooooooooollllllll => cool – 辞書にない単語に対応できない • 対策案2: 3文字以上の連続を2文字に縮める – 正書法の範囲で、同じラテン文字が3字以上続く言語 はない • 例外:略語( WWW, СССР ) • 日本語だと「かたたたき」とか「かわいいいぬ」とかある 38
    • まとめ • SNS のテキストは正書法に従わない – 入力コストの低い方へ流れる • 言語判定でのみ必要な知識? いいえ! – これらの知識で正規化すれば単語共起、 トピック分類なども良い結果になるかも? • 実用的な精度 ≠ 研究に求められる精度 – 「先行研究の精度を上回る」という目標がない – 必要な精度を出すためなら何でもする • 例:30万件のツイートに言語ラベルをふる 39
    • References • [中谷 NLP12]極大部分文字列を使った twitter 言語判定 • [岡野原+ 08] 全ての部分文字列を考慮した文書分類 • ニューエクスプレスシリーズ(白水社) – スウェーデン語、ノルウェー語、デンマーク語、ポーランド語、ハン ガリー語、ルーマニア語、チェコ語、リトアニア語、スペイン語、カ タルーニャ語、ベトナム語、トルコ語、ドイツ語、オランダ語、マ レー語、セルビア語・クロアチア語、他 • [Cavnar+ 94] N-Gram-Based Text Categorization • [Brody+ 11] Cooooooooooooooollllllllllllll!!!!!!!!!!!!!! Using Word Lengthening to Detect Sentiment in Microblogs 40