40
ソーシャルメディアの多言語判定 2014/6/21 SoC2014 中谷 秀洋 サイボウズ・ラボ株式会社

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

2014/6/21 SoC2014

中谷 秀洋

サイボウズ・ラボ株式会社

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

サイボウズの紹介

2

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

サイボウズ株式会社

• 企業内外のコラボレーションを促進するソフトウェアを提供、そのための技術開発を行う

– サイボウズ Office / ガルーン

• 企業内グループウェア

– サイボウズ Live

• 企業間・個人向けグループウェア

– kintone

• Web画面でアプリ開発できる SaaS プラットフォーム

– cybozu.com

• 自社クラウドサービス

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

自社クラウドを支える技術

• yrmcds

– レプリケーション機能と サーバーサイドロック機能を持つ memcached 互換な KVS

– 2条項 BSD ライセンスで公開

– http://cybozu.github.io/yrmcds/

4

レプリケーション機能を用いた 無停止アップグレード

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

自社クラウドを支える技術

• WalB

– 任意のファイルシステムをオンラインバックアップ可能にする Linux のログ先行書き込みブロックデバイスドライバ

– GPL v2/v3 ライセンスで公開

– https://github.com/starpos/walb/

5

WalB のアーキテクチャ

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

はじめに

6

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

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%

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

本発表の内容

• 言語判定

– テキストが書かれた言語を推定する技術と

開発したライブラリの紹介

• 多言語のテキスト表現に関する知見

– 言語判定を通じて得たもの

– 多言語に渡るサービスや研究にあたって知っ

てて嬉しい

• 正書法が通じると思ったら大間違い!

8

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

言語判定

9

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

ある日こんなメールが

10

• 読めない……

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

困ったときの Google 先生

• ポーランド語のスパムでした。 11

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

そういえば 迷惑メールフォルダに入っていた

12

• でもなぜスパムだとわかったのだろう?

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

スパムフィルタ

• 「スパムっぽい単語」→スパム確率up(※

• フィルタは言語ごとに必要

– 英語のスパムを判定するには、

まず英語であることを知らなければならない

13

無料 バイアグラ

オオアリクイ :

free mastercard account

:

英語用フィルタ 日本語用フィルタ

※ベイジアンフィルタなどを利用したモデルの場合。

他にルールベース(ホワイト&ブラックリスト)のアプローチなどもあります

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

言語判定とは

• 入力テキストの記述言語を推定

– Time fries like arrow → 英語

– Buona sera! → イタリア語

• 多くの言語処理での前提タスク

– 言語モデルは言語ごとに構築されるため

– 検索、分類、抽出、翻訳、……

• もともとグループウェアの検索機能に言語の絞り

込みを付加するために開発した

14

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

ニューステキストに対する言語判定 (後述する langdetect による評価)

15

言語 データ件数 正解数(率) 内訳af アフリカーンス語 200 199 (99.50%) en=1, af=199ar アラビア語 200 200 (100.00%) ar=200bg ブルガリア語 200 200 (100.00%) bg=200bn ベンガル語 200 200 (100.00%) bn=200cs チェコ語 200 200 (100.00%) cs=200da デンマーク語 200 179 (89.50%) da=179, no=14, en=7de ドイツ語 200 200 (100.00%) de=200el ギリシア語 200 200 (100.00%) el=200en 英語 200 200 (100.00%) en=200es スペイン語 200 200 (100.00%) es=200fa ペルシア語 200 200 (100.00%) fa=200fi フィンランド語 200 200 (100.00%) fi=200fr フランス語 200 200 (100.00%) fr=200gu グジャラート語 200 200 (100.00%) gu=200he ヘブライ語 200 200 (100.00%) he=200hi ヒンディー語 200 200 (100.00%) hi=200hr クロアチア語 200 200 (100.00%) hr=200hu ハンガリー語 200 200 (100.00%) hu=200id インドネシア語 200 200 (100.00%) id=200it イタリア語 200 200 (100.00%) it=200ja 日本語 200 200 (100.00%) ja=200kn カンナダ語 200 200 (100.00%) kn=200ko 朝鮮語(韓国語) 200 200 (100.00%) ko=200mk マケドニア語 200 200 (100.00%) mk=200ml マラヤーラム語 200 200 (100.00%) ml=200

言語 データ件数 正解数(率) 内訳mr マラーティー語 200 200 (100.00%) mr=200ne ネパール語 200 200 (100.00%) ne=200nl オランダ語 200 200 (100.00%) nl=200no ノルウェー語 200 199 (99.50%) da=1, no=199pa パンジャーブ語 200 200 (100.00%) pa=200pl ポーランド語 200 200 (100.00%) pl=200pt ポルトガル語 200 200 (100.00%) pt=200ro ルーマニア語 200 200 (100.00%) ro=200ru ロシア語 200 200 (100.00%) ru=200sk スロバキア語 200 200 (100.00%) sk=200so ソマリ語 200 200 (100.00%) so=200sq アルバニア語 200 200 (100.00%) sq=200sv スウェーデン語 200 200 (100.00%) sv=200sw スワヒリ語 200 200 (100.00%) sw=200ta タミル語 200 200 (100.00%) ta=200te テルグ語 200 200 (100.00%) te=200th タイ語 200 200 (100.00%) th=200tl タガログ語 200 200 (100.00%) tl=200tr トルコ語 200 200 (100.00%) tr=200uk ウクライナ語 200 200 (100.00%) uk=200ur ウルドゥー語 200 200 (100.00%) ur=200vi ベトナム語 200 200 (100.00%) vi=200

zh-cn 中国語(簡体字) 200 200 (100.00%) zh-cn=200zh-tw 中国語(繁体字) 200 200 (100.00%) zh-tw=200

合計 9800 9777 (99.77%)

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

言語判定は「単純なテキスト分類問題」

• 十分長い&低ノイズなテキストに対し

99%以上の精度 [Cavnar+ 94]

– 簡易な実装でも十分高い精度が出る

• 言語判定はオワコン?

– 研究的にはもしかしたらそうかも

– でも実用面ではまだまだ課題多し!

16

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

ツイートを言語判定すると

• 精度は 90~95%

– 10~20件に1つ間

違い

• LD = language-detection

• CLD = Chromium Compact Language Detection

– http://code.google.com/p/chromium-compact-language-detector/

• Tika = Apache Tika

– http://tika.apache.org/

– 対応している15言語のみ評価

言語 LD CLD Tikaca カタルーニャ語 95.3 93.0 83.8cs チェコ語 96.3 96.6 ----da デンマーク語 94.5 90.7 58.7de ドイツ語 86.6 96.8 73.1en 英語 88.3 97.4 54.7es スペイン語 91.5 90.5 44.4fi フィンランド語 98.9 99.4 94.8fr フランス語 95.0 94.5 67.4hu ハンガリー語 85.8 89.0 76.2id インドネシア語 89.7 92.8 ----it イタリア語 96.2 93.8 87.1nl オランダ語 69.5 93.2 65.0no ノルウェー語 96.0 74.9 68.6pl ポーランド語 98.0 97.8 88.8pt ポルトガル語 88.0 88.6 47.4ro ルーマニア語 92.8 96.1 82.6sv スウェーデン語 96.0 96.4 75.6tr トルコ語 97.6 97.4 ----vi ベトナム語 98.7 98.9 ----

計 92.2 93.8 70.0

17

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

精度 90% もあれば十分?

• 実用には厳しい

– 10個に1個間違い

– 95% でも、20個に1個間違い

• 多くの言語処理の前提タスク

– 言語判定を間違えると、後も全部失敗!

– 例:ポーランド語スパムに英語フィルタを使う

• 言語判定は高い精度が求められる

– 少なくとも精度 99%は欲しい

18

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

SNS/チャット 言語判定の難しさ

• テキスト長が短い

– twitter は最大140字、多くは十数~数十字以下

– 3-gram ではわずかな素性しか取り出せない

– ★短文から豊富な素性を抽出できるモデルが必要

• ノイズが多い

– 正書法から外れた表現(省略語、短縮語、繰り返し)

– 通常の言語モデルに当てはめると尤度が小さい

– ★ノイズクリーニング&専用のコーパスが必要

19

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

言語判定ソフトウェア

20

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

language-detection(langdetect) [中谷 2010]

• 言語判定 Java ライブラリ – http://code.google.com/p/language-detection/

– オープンソース (Apache License 2.0)

– 文字 3-gram + ベイジアンフィルタ

– 各種正規化+特徴のサンプリング

• 53言語について 99% 以上の精度で判定

– 対象は新聞記事など「ある程度長く整った文章」

– アジア圏の言語にも広く対応

– Apache Solr など、多くの製品・研究に利用

21

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

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

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

twitter 言語判定のモデル

• 極大部分文字列を使ったロジスティック回帰 [岡野原+ 08]

– 全ての部分文字列を特徴量とする(∞-gram)

– ツイートのような短い文字列でも、 n-gram より多くの特徴量が得られる

– 詳細は http://www.slideshare.net/shuyo/short-text-language-detection-with-infinitygram-12949447 等を参照

23 via http://d.hatena.ne.jp/nokuno/20120203/1328237067

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

コーパス

• twitter 特有の表現が多い

– 専用のコーパスが必要だが、十分な量が無い

– 自分で作るしか

• ツイート収集

– twitter Streaming API の sample メソッド

(約200万件/日)

• ツイートに言語ラベルを振る

– 50言語 約30万件

24

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

コーパス作り(イメージ図)

25

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

50言語のツイートを 約 99% の精度で判定

26

# code 言語 訓練 テスト 正解 精度1 ar アラビア語 9,939 1,981 1,976 0.9972 ar-bz Arabizi 192 31 23 0.7423 bg ブルガリア語 9,540 1,864 1,819 0.9764 bn ベンガル語 9,993 1,814 1,791 0.9875 ca カタルーニャ語 8,202 1,240 1,227 0.9906 cs チェコ語 10,315 1,930 1,916 0.9937 da デンマーク語 10,251 1,905 1,859 0.9768 de ドイツ語 10,130 1,809 1,802 0.9969 dv ディベヒ語 978 102 102 1.000

10 el ギリシャ語 9,442 1,889 1,888 0.99911 en 英語 10,269 2,032 1,988 0.97812 es スペイン語 10,371 2,056 2,016 0.98113 et エストニア語 2,067 543 529 0.97414 fa ペルシャ語 9,904 1,965 1,956 0.99515 fi フィンランド語 9,702 2,055 2,036 0.99116 fr フランス語 9,927 2,042 2,010 0.98417 gu グルジア語 1,547 106 105 0.99118 he ヘブライ語 9,705 1,950 1,950 1.00019 hi ヒンディー語 9,956 1,821 1,817 0.99820 hr クロアチア語 8,624 1,923 1,880 0.97821 hu ハンガリー語 9,811 1,959 1,939 0.99022 id インドネシア語 9,903 1,974 1,951 0.98823 it イタリア語 10,283 1,988 1,982 0.99724 ja 日本語 9,916 1,968 1,967 0.99925 ko 韓国語 9,906 1,976 1,974 0.999

# code 言語 訓練 テスト 正解 精度26 lt リトアニア語 6,855 1,001 994 0.99327 lv ラトヴィア語 3,651 1,158 1,144 0.98828 mk マケドニア語 6,654 1,340 1,323 0.98729 ml マラヤーラム語 7,103 996 996 1.00030 mn モンゴル語 120 28 28 1.00031 nl オランダ語 9,840 1,964 1,939 0.98732 no ノルウェー語 9,673 1,896 1,838 0.96933 pa パンジャーブ語 1,550 201 201 1.00034 pl ポーランド語 10,186 1,722 1,717 0.99735 pt ポルトガル語 9,301 1,893 1,869 0.98736 ro ルーマニア語 9,571 1,924 1,909 0.99237 ru ロシア語 10,186 1,953 1,937 0.99238 si シンハラ語 4,114 671 670 0.99939 sq アルバニア語 2,432 421 414 0.98340 sv スウェーデン語 9,451 1,853 1,828 0.98741 ta タミル語 9,949 2,084 2,084 1.00042 te テルグ語 1,795 303 302 0.99743 th タイ語 8,993 1,761 1,761 1.00044 tl タガログ語 9,910 1,954 1,935 0.99045 tr トルコ語 9,698 1,928 1,918 0.99546 uk ウクライナ語 9,929 2,168 2,020 0.93247 ur ウルドゥー語 9,037 1,003 1,003 1.00048 vi ベトナム語 9,815 1,948 1,930 0.99149 zh-cn 中国語(簡体字) 9,790 1,840 1,816 0.98750 zh-tw 中国語(繁体字) 9,878 1,825 1,816 0.995

total 400,354 76,758 75,895 0.989

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

SNS・チャット特有のテキスト表現

27

ブカレスト市内の看板(Google Streat View より)

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

何語のつぶやきでしょうか?

• ヒント

– 実際のツイートです

– 2億以上の話者がいるメジャーな言語です

28

t9b7en 3la khair

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

29

t9b7en 3la khair

t 9 b 7 e n 3 l a kh ai r

ر ي خ ى ل ع ن ي ح ب ص ت

تصبحين على خير “Good night”

アラビア語

アラビア文字は右から左に

Arabizi にしたがって変換

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

Arabizi (Arabic Chat Alphabet)

• アラビア文字をアルファベット+数字で置き換え

– http://en.wikipedia.org/wiki/Arabic_chat_alphabet

30 (Wikipedia より)

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

Arabizi は90年代に誕生

• PC/スマホの普及にともない利用拡大

– 入力だけではなく Arabizi で読み書きを

• 「Arabizi はアラビア語を破壊しつつある」

– 学生「Arabizi に慣れたらアラビア文字で書けなくなってきた。レポートなどを書くときは一度 Arabizi で書いてからアラビア文字に変換」

– http://www.arabnews.com/node/374897

• 英単語混じりのアラビア語ツイートが!

31

入力/記述コストの低い方へ

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

チェコ語 / スロバキア語

• 系統上 非常に近い兄弟言語

– 話者同士の意思疎通が可能

• ニューステキストなどの判別は容易(ほぼ100% の精度)

– チェコ語でのみ使う文字 : ĚŘŮ

– スロバキア語でのみ使う文字 : ÄĹĽÔŔ

– 異なる機能語も少なくない

• 例:代名詞の一人称単数主格形

• チェコ語は “já”、スロバキア語は “ja”

32

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

アクセントの省略

• 入力しにくい記号付きアルファベット

– ÁÉÍÓÚÜ(スペイン語)、ÇĞİÖŞÜ(トルコ語)、…

– ツイートではアクセントのない文字で代用が

• チェコ語/スロバキア語の一人称

– “já” / “ja” → どちらも “ja” に

– 言語判別が非常に難しい(80%台まで下がる)

• 他の例: “eik iš čia” (リトアニア語: go from here)

– “eik is cia” となり、他の言語に判定される

33

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

その他の文字の代替 (1)

• ドイツ語

– “ß” : エスツェット、スイス-ドイツ語では

“ss” を使う

– 入力しにくいため、ドイツでも “ss” に

• ルーマニア語

– 正書法の定める “ș”, “ț” より “ş”, “ţ” を多用

– OS などによるサポートが遅かったため、

ネットに限らず印刷物や看板などでも代用率

が高い

34

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

ブカレストまで行って探してきた (Google Street View で)

• 街中の看板にも代用字(セディーユ付き)が使われている 35

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

その他の文字の代替 (2)

• ペルシャ語

– U+064a, Arabic)ي の代わりに (U+06cc, Farsi yeh) یyeh)が使われる

– これも文字コード由来のため、SNS以外でも新聞など多くのメディアで発生している

• モンゴル語

– 本来はモンゴル文字(縦書き)だが、キリル文字が広く使われる(ネットでは特に)

– ロシア語のキリル文字とほぼ共通だが、 2つの独自文字のうち “ү”(U+04af) が “v”(U+0076) で置き換えられる

36

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

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 に各国語の笑い表現がまとめられている

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

文字を重ねる表現の取り扱い

• coooooooollllll、たっっっっぷり のように強調のために同じ文字を重ねる表現

• 対策案1: [Brody+ 2011] で正規化辞書を作る

– cooooooooollllllll => cool

– 辞書にない単語に対応できない

• 対策案2: 3文字以上の連続を2文字に縮める

– 正書法の範囲で、同じラテン文字が3字以上続く言語はない

• 例外:略語( WWW, СССР )

• 日本語だと「かたたたき」とか「かわいいいぬ」とかある

38

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

まとめ

• SNS のテキストは正書法に従わない

– 入力コストの低い方へ流れる

• 言語判定でのみ必要な知識? いいえ!

– これらの知識で正規化すれば単語共起、 トピック分類なども良い結果になるかも?

• 実用的な精度 ≠ 研究に求められる精度

– 「先行研究の精度を上回る」という目標がない

– 必要な精度を出すためなら何でもする

• 例:30万件のツイートに言語ラベルをふる

39

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

References

• [中谷 NLP12]極大部分文字列を使った twitter 言語判定

• [岡野原+ 08] 全ての部分文字列を考慮した文書分類

• ニューエクスプレスシリーズ(白水社)

– スウェーデン語、ノルウェー語、デンマーク語、ポーランド語、ハンガリー語、ルーマニア語、チェコ語、リトアニア語、スペイン語、カタルーニャ語、ベトナム語、トルコ語、ドイツ語、オランダ語、マレー語、セルビア語・クロアチア語、他

• [Cavnar+ 94] N-Gram-Based Text Categorization

• [Brody+ 11] Cooooooooooooooollllllllllllll!!!!!!!!!!!!!! Using Word Lengthening to Detect Sentiment in Microblogs

40