Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

国際化時代の40カ国語言語判定

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 32 Anzeige

国際化時代の40カ国語言語判定

Herunterladen, um offline zu lesen

言語判定とは、テキストが何語で書かれたものか推定することです。
99.8%の精度で49言語の判定可能なJavaライブラリを開発、オープンソースとして公開しました。

言語判定とは、テキストが何語で書かれたものか推定することです。
99.8%の精度で49言語の判定可能なJavaライブラリを開発、オープンソースとして公開しました。

Anzeige
Anzeige

Weitere Verwandte Inhalte

Ähnlich wie 国際化時代の40カ国語言語判定 (11)

Anzeige

Weitere von Shuyo Nakatani (20)

Aktuellste (20)

Anzeige

国際化時代の40カ国語言語判定

  1. 1. 国際化時代の 40カ国語 言語判定 WebDB Forum 2010 2010/11/12 中谷 秀洋@サイボウズ・ラボ株式会社
  2. 2. 自己紹介  中谷秀洋(なかたに しゅうよう)  サイボウズ・ラボのエンジニア  現在は機械学習/自然言語処理を中心に研究開発  gihyo.jp で連載「機械学習 はじめよう」を担当  ExtractContent (Ruby の Web ページ本文抽出)  “ぺけ-BASIC”(X68000)の作者  twitter : @shuyo ( http://twitter.com/shuyo )  ブログ : http://d.hatena.ne.jp/n_shuyo/
  3. 3. サイボウズ  サイボウズ株式会社  サイボウズ Office : 企業内グループウェア  サイボウズ Live : 企業間・個人向けグループウェア  サイボウズ・ラボ株式会社  サイボウズの100%子会社  Web技術や情報共有をテーマとした、中長期視点 の研究開発  サイボウズの、次の次の製品に役立つような  けっこう自由に、けっこう幅広く
  4. 4. 早速ですが 問題です。
  5. 5. 何語でしょう? sprogregistrering språkgjenkjenning
  6. 6. 何語でしょう? デンマーク語 ノルウェー語 sprogregistrering språkgjenkjenning
  7. 7. 何語でしょう? ‫اللغة‬ ‫عن‬ ‫الكشف‬ ‫زبان‬ ‫تشخیص‬ ‫زبان‬‫شناخت‬ ‫کی‬
  8. 8. 何語でしょう? アラビア語 ペルシャ語 ウルドゥー語 ‫اللغة‬ ‫عن‬ ‫الكشف‬ ‫زبان‬ ‫تشخیص‬ ‫زبان‬‫شناخت‬ ‫کی‬
  9. 9. 言語判定とは  不えられた文書が何語で書かれたものか判定  同時に文字コード判定することも(今回は対象外) 英語 ドイツ語 日本語 中国語 スペイン語 イタリア語 アラビア語 ヒンディー 朝鮮語
  10. 10. 言語判定の方法  サポートする言語が多くなるほど難しい  同じ文字を使う異なる言語は数多い  文字・言語の知識が必要  シンプルな方法:  各言語で使われる単語を辞書で持ち、マッチング  辞書が膨大、変化形・合成語への対応が難しい  今回の方法:  綴り字の特徴量から確率を計算  文字 n-gram を用いたナイーブベイズ
  11. 11. 言語判定を何に使う?  利用シーン  検索機能に言語の絞り込みをつけたい  “Java” で検索したら中国語の文書がヒットした!  言語別のフィルタを適用したい(SPAMフィルタとか)  言語固有の情報(句読点、キーワード)を用いる  利用対象  Web検索エンジン  Apache Nutch には言語判定モジュールが付属  掲示板  例:日英中越入り交じりの書き込み サイボウズは 日本・上海・ベトナムに 開発チームが!
  12. 12. 既存の言語判定  言語判定ライブラリは数少ない  ニーズが限られている?  Web検索だけ? でもこれからはグローバル化の時代!  コーパス/モデルの構築が高コスト  対象言語の知識が必要  対応言語数が少ない。精度が低い。速度が丌満  おおむね10言語程度。アジア系はサポートなし  “Thank you very much. ありがとうございます”  →「タガログ語かチェコ語かスロバキア語です」
  13. 13. 「実用性」のある言語判定  精度は 99% 以上  “90%” は実用的ではない (1000個のうち100個間違う)  サポート言語数は 50  欧文、アジア系言語、幅広く  高速な判定  多数の文書を判定したい  複数候補が考えられる場合は、度合いを返す
  14. 14. 言語判定ライブラリ for Java  言語判定を行う Java ライブラリを開発  学習コーパスから言語ごとのプロファイルを生成  プロファイル = 綴り字ごとの確率を計算したもの  テキストを不えると、言語の候補と確率を返す  ライブラリの対応言語数: 49言語(2010/11 現在)  オープンソースとして公開  http://code.google.com/p/language-detection/  Apache License 2.0
  15. 15. 性能評価  学習コーパス  Wikipedia より 49言語について学習  Wikipedia は 276 言語対応(2010/11 現在)  対応言語数=テストコーパスを用意できる言語数  テストコーパス  49言語のニュース記事 各 200件  Google News (24言語)  各言語のニュースサイト  RSS により収集 ここが一番たいへん! マイナーな言語は RSS配信もされてない
  16. 16. 評価結果 (1) 言語 データ件数 正解数(率) 内訳 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 赤枠は 精度100%ではない言語
  17. 17. 評価結果 (2) 言語 データ件数 正解数(率) 内訳 mr マラーティー語 200 200 (100.00%) mr=200 ne ネパール語 200 200 (100.00%) ne=200 nl オランダ語 200 200 (100.00%) nl=200 no ノルウェー語 200 199 (99.50%) da=1, no=199 pa パンジャーブ語 200 200 (100.00%) pa=200 pl ポーランド語 200 200 (100.00%) pl=200 pt ポルトガル語 200 200 (100.00%) pt=200 ro ルーマニア語 200 200 (100.00%) ro=200 ru ロシア語 200 200 (100.00%) ru=200 sk スロバキア語 200 200 (100.00%) sk=200 so ソマリ語 200 200 (100.00%) so=200 sq アルバニア語 200 200 (100.00%) sq=200 sv スウェーデン語 200 200 (100.00%) sv=200 sw スワヒリ語 200 200 (100.00%) sw=200 ta タミル語 200 200 (100.00%) ta=200 te テルグ語 200 200 (100.00%) te=200 th タイ語 200 200 (100.00%) th=200 tl タガログ語 200 200 (100.00%) tl=200 tr トルコ語 200 200 (100.00%) tr=200 uk ウクライナ語 200 200 (100.00%) uk=200 ur ウルドゥー語 200 200 (100.00%) ur=200 vi ベトナム語 200 200 (100.00%) vi=200 zh-cn 中国語(簡体字) 200 200 (100.00%) zh-cn=200 zh-tw 中国語(繁体字) 200 200 (100.00%) zh-tw=200 合計 9800 9777 (99.77%)
  18. 18. アルゴリズムと精度向上の工夫
  19. 19. ナイーブベイズによる言語判定  「言語」をカテゴリとした文書分類を行う  文書が「英語」に分類されるか、「日本語」に分類さ れるか判定  カテゴリ毎の特徴量の出現確率から カテゴリの事後確率を更新  𝑝 𝐶k 𝑋 (m+1) ∝ 𝑝 𝐶k 𝑋 m ⋅ 𝑝 𝑋𝑖 𝐶 𝑘  where 𝐶k:カテゴリ, 𝑋:文書, 𝑋𝑖:文書の特徴量  正規化し、最大確率が0.99999を超えたら終了  判定処理を打ち切ることができる データサイズによらず高速
  20. 20. 判定に用いる特徴量  特徴量に「文字 n-gram」を使う  正確には「Unicodeのコードポイント n-gram」  文字 n-gram は単語よりはるかに少ない □ T h i s □ T h i s ←1-gram □T Th hi is s□ ←2-gram □Th Thi his is□ ←3-gram 単語の区切りを 表す記号
  21. 21. 文字n-gramで言語判定ができる理由  各言語には固有の文字や綴り字の規則がある  アクセント付きの “é” はスペイン語、イタリア語などではよ く使われるが、英語では原則として用いない  “Z” で始まる単語はドイツ語には多いが、英語にはほと んど無い  “C”で始まる単語や “Th” という綴りは英語には多いがド イツ語には少ない  これら特徴に「確率」を設定し、文書全体について 累積 □C □L □Z Th 英語 0.75 0.47 0.02 0.74 ドイツ語 0.10 0.37 0.53 0.03 フランス語 0.38 0.69 0.01 0.01
  22. 22. これで判定できるようになったが……  アルゴリズムそのままでの精度は90%前後  「実用レベル」ではない  特定の言語で非常に精度が悪い  日本語、中国語(繁体字)、ロシア語、ペルシャ語、……  精度が上がらない最大の原因:  コーパス(学習/判定テキスト)の偏りとノイズ  これらを様々な方法で除去  フィルタ  文字の正規化 対策のごく一部……
  23. 23. (1) 文字種の偏り  アルファベット  30字前後  アラビア文字、デーヴァナーガリー(インド)も同様  漢字:  20000字~  文字種が他言語の1000倍!  Wikipedia で使われない文字(ゼロ頻度問題)  「谢谢」が判定できない  日本人の人名漢字も同様 大文字小文字を分けても 高々倍 Wikipedia に 「谢」は出てこない!
  24. 24. 「常用漢字」を考慮した正規化  「頻度が似ている漢字」でグルーピングし、 代表文字に正規化(グループ全体を1文字につぶす)  (1) K-means によるクラスタ分類  (2) 「常用漢字」による分類  簡体字: 现代汉语常用字表(3500字)  繁体字: Big5第1水準(5401字、「常用国字標準字体表」 4808字を含む)  日本語: 常用漢字(2136字)+JIS 第1水準(2965字)=2998字  常用漢字だけでは、氏名や地名の漢字の多くが入っていない  K-means のクラスタ&各「常用漢字」で集合積 → 130のクラスタに分類
  25. 25. (2) テキストのノイズ  言語に依存しない文字 → 単純に除去  数字、記号、URL やメールアドレス  ラテン文字ノイズ in 非ラテン文字  非ラテン文字の中にも頻繁に出現  ある意味世界共通文字  → ラテン文字が2割以下なら除去  ラテン文字ノイズ in ラテン文字  略字、人名は言語の特徴を表さない  特に人名は他言語の特徴をもつことも多い(Mc~=ゲール語)  → 全て大文字の単語は除去  → 特徴サンプリングして、人名などの局所的な特徴の影 響を低減
  26. 26. アラビア文字の正規化  ペルシャ語の判定が全滅(全てアラビア語に!!)  同じアラビア文字だが語族が違う→判別は容易なはず  原因:高頻度で使われる yeh のコードが異なる  学習コーパス(Wikipedia)では ‫ی‬ (¥u06cc, Farsi yeh)  テストコーパス(ニュース)では ‫¥(ي‬u064a, Arabic yeh)  推測:アラビア語の文字コード CP-1256 には ¥u06cc にマッピ ングされる文字がないため、¥u064aで代用する手法が定着?  対策: ¥u06cc を ¥u064a に正規化 ペルシア語ではye( ‫)ی‬の独立形・右接形には識別点を付けないが,付けているものをよく見かけ る。これはアラビア語キーボードでペルシア語を入力したときによく起こる問題である。また,OS やブラウザーなどの環境によってはこの文字が正しく出ないため,ウェブでは確信犯的にアラビ ア語のyā’( ‫)ي‬を使っていることが多い。 「アラビア語系文字の基礎知識」より
  27. 27. まとめ
  28. 28. まとめ  49言語を 99.8% で判定可能な言語判定ライ ブラリを開発  オープンソースとして公開  http://code.google.com/p/language-detection/  サイボウズ次期製品への採用予定  90%までは簡単。でも実用レベルは99.*%~  理想:美しい斬新な理論で一発解答  現実:どこまでも泥臭い工夫の固まり
  29. 29. Open Issues  短文の判定が苦手(twitterのつぶやきとか)  アラビア語の母音記号をどう扱う?  複数言語で記述された文書の言語判別  テキストにソースコードが入っていると……
  30. 30. 参考文献  千野栄一編「世界のことば100語辞典 ヨーロッパ編」  町田和彦編「図説 世界の文字とことば」  世界の文字研究会「世界の文字の図典」  町田和彦「ニューエクスプレス ヒンディー語」  中村公則「らくらくペルシャ語 文法から会話」  道広勇司「アラビア系文字の基礎知識」  http://moji.gr.jp/script/arabic/article01.html  北研二,辻井潤一「確率的言語モデル」  [Dunning 1994] Statistical Identification of Language  [Sibun & Reynar 1996] Language identification: Examining the issues  [Martins+ 2005] Language Identification in Web Pages
  31. 31. twitter で応募できます! [宣伝]エンジニアの未来サミット for student http://cybozu.co.jp/company/job/recruitment/recruit/seminar.html
  32. 32. ありがとうございました

×