More Related Content More from Shuyo Nakatani (13) ソーシャルメディアの多言語判定 #SoC20147. 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%
14. 言語判定とは
• 入力テキストの記述言語を推定
– Time fries like arrow → 英語
– Buona sera! → イタリア語
• 多くの言語処理での前提タスク
– 言語モデルは言語ごとに構築されるため
– 検索、分類、抽出、翻訳、……
• もともとグループウェアの検索機能に言語の絞り
込みを付加するために開発した
14
15. ニューステキストに対する言語判定
(後述する 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%)
17. ツイートを言語判定すると
• 精度は 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
18. 精度 90% もあれば十分?
• 実用には厳しい
– 10個に1個間違い
– 95% でも、20個に1個間違い
• 多くの言語処理の前提タスク
– 言語判定を間違えると、後も全部失敗!
– 例:ポーランド語スパムに英語フィルタを使う
• 言語判定は高い精度が求められる
– 少なくとも精度 99%は欲しい
18
19. SNS/チャット 言語判定の難しさ
• テキスト長が短い
– twitter は最大140字、多くは十数~数十字以下
– 3-gram ではわずかな素性しか取り出せない
– ★短文から豊富な素性を抽出できるモデルが必要
• ノイズが多い
– 正書法から外れた表現(省略語、短縮語、繰り返し)
– 通常の言語モデルに当てはめると尤度が小さい
– ★ノイズクリーニング&専用のコーパスが必要
19
21. language-detection(langdetect)
[中谷 2010]
• 言語判定 Java ライブラリ
– http://code.google.com/p/language-detection/
– オープンソース (Apache License 2.0)
– 文字 3-gram + ベイジアンフィルタ
– 各種正規化+特徴のサンプリング
• 53言語について 99% 以上の精度で判定
– 対象は新聞記事など「ある程度長く整った文章」
– アジア圏の言語にも広く対応
– Apache Solr など、多くの製品・研究に利用
21
22. 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
23. 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
24. コーパス
• twitter 特有の表現が多い
– 専用のコーパスが必要だが、十分な量が無い
– 自分で作るしか
• ツイート収集
– twitter Streaming API の sample メソッド
(約200万件/日)
• ツイートに言語ラベルを振る
– 50言語 約30万件
24
26. 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
29. 29
t9b7en 3la khair
t 9 b 7 e n 3 l a kh ai r
ت ص ب ح ي ن ع ل ى خ ي ر
خير على تصبحين
“Good night”
アラビア語
アラビア文字
は右から左に
Arabizi にしたがって変換
30. Arabizi (Arabic Chat Alphabet)
• アラビア文字をアルファベット+数字で置き換え
– http://en.wikipedia.org/wiki/Arabic_chat_alphabet
30
(Wikipedia より)
31. Arabizi は90年代に誕生
• PC/スマホの普及にともない利用拡大
– 入力だけではなく Arabizi で読み書きを
• 「Arabizi はアラビア語を破壊しつつある」
– 学生「Arabizi に慣れたらアラビア文字で書けな
くなってきた。レポートなどを書くときは一度
Arabizi で書いてからアラビア文字に変換」
– http://www.arabnews.com/node/374897
• 英単語混じりのアラビア語ツイートが!
31
入力/記述コストの低い方へ
32. チェコ語 / スロバキア語
• 系統上 非常に近い兄弟言語
– 話者同士の意思疎通が可能
• ニューステキストなどの判別は容易(ほぼ
100% の精度)
– チェコ語でのみ使う文字 : ĚŘŮ
– スロバキア語でのみ使う文字 : ÄĹĽÔŔ
– 異なる機能語も少なくない
• 例:代名詞の一人称単数主格形
• チェコ語は “já”、スロバキア語は “ja”
32
34. その他の文字の代替 (1)
• ドイツ語
– “ß” : エスツェット、スイス-ドイツ語では
“ss” を使う
– 入力しにくいため、ドイツでも “ss” に
• ルーマニア語
– 正書法の定める “ș”, “ț” より “ş”, “ţ” を多用
– OS などによるサポートが遅かったため、
ネットに限らず印刷物や看板などでも代用率
が高い
34
36. その他の文字の代替 (2)
• ペルシャ語
– ی (U+06cc, Farsi yeh) の代わりに (يU+064a, Arabic
yeh)が使われる
– これも文字コード由来のため、SNS以外でも新聞など多く
のメディアで発生している
• モンゴル語
– 本来はモンゴル文字(縦書き)だが、キリル文字が広く使わ
れる(ネットでは特に)
– ロシア語のキリル文字とほぼ共通だが、 2つの独自文字の
うち “ү”(U+04af) が “v”(U+0076) で置き換えられる
36
37. 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 に各国語の笑い表現がまとめられている
39. まとめ
• SNS のテキストは正書法に従わない
– 入力コストの低い方へ流れる
• 言語判定でのみ必要な知識? いいえ!
– これらの知識で正規化すれば単語共起、
トピック分類なども良い結果になるかも?
• 実用的な精度 ≠ 研究に求められる精度
– 「先行研究の精度を上回る」という目標がない
– 必要な精度を出すためなら何でもする
• 例:30万件のツイートに言語ラベルをふる
39
40. References
• [中谷 NLP12]極大部分文字列を使った twitter 言語判定
• [岡野原+ 08] 全ての部分文字列を考慮した文書分類
• ニューエクスプレスシリーズ(白水社)
– スウェーデン語、ノルウェー語、デンマーク語、ポーランド語、ハン
ガリー語、ルーマニア語、チェコ語、リトアニア語、スペイン語、カ
タルーニャ語、ベトナム語、トルコ語、ドイツ語、オランダ語、マ
レー語、セルビア語・クロアチア語、他
• [Cavnar+ 94] N-Gram-Based Text Categorization
• [Brody+ 11] Cooooooooooooooollllllllllllll!!!!!!!!!!!!!! Using
Word Lengthening to Detect Sentiment in Microblogs
40