言語処理学会 第 18 回年次大会 発表論文集 (2012 年 3 月)￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣

極大部分文字列を使った twitter 言語判定
中谷 秀洋
サイボウズ・ラボ株式会社

nakatani@labs.cybozu.co.jp
1

第 6 章では本研究の評価を記し，第 7 章では結論と課

はじめに
言語判定 (または言語判別，言語識別) はテキストが記述されている言語を推定する技術である．全文検索

題をまとめる．

2

関連研究における言語の絞り込みや，文書分類 (スパム判定な言語判定に関する研究の多くは，言語判定を文書分ど)，本文抽出や機械翻訳など，言語モデルを用いる類の問題として定式化している．文字 n-gram 素性に言語処理において言語判定は前提処理として必須であより分類器を構築するのが最も一般的である [4], [5]

り，したがってウェブ上のデータ処理やサービスに対が，分布の類似度によって判別する手法 [6]，グラフして有用な技術である．また昨今の国際化の流れの中を用いる手法 [7] などがある．

で，複数の国・地域をまたがる拠点を持つ企業も少な

これまでの研究により，十分ノイズが少なく十分長くなく，そのためグループウェアのように閉じたネッ

いテキストであれば 100%に近い精度で言語判定を行

トワーク上で利用されるアプリケーションでもその必えることが示されており [4], [9]，実用的な精度で言語要性は増している．

判定を行うライブラリも公開されている [5], [2]．

言語判定の技術は早くより研究されており [4], [6]，ところがこれらの手法を twitter のツイートに対しまたライブラリとしても提供されている [5], [2] が，そて適用した場合，90%前後の精度に落ちてしまうことれらの多くは文書が十分長いことを仮定しており，文がわかっている [7]．要因の一つとして，マイクロブ書が短い場合は対象外であった．良い言語判定器は十ログ固有の表現が多いことが考えられる．同じ分類器

分長い文書に対しては 99%を超える精度で判定可能でにおいても twitter から収集したコーパスを訓練デーあるが，3〜10 語の短文では 90%程度の精度にとどまタとすることで，95%程度まで精度が向上することがり，実用上十分な精度があるとは言えなかった．

示されている [10]．

一方で，twitter に代表されるマイクロブログの流行

もう一つの要因としては，短い文章から抽出できるもあって，ウェブ関連サービスにて言語横断の短文を素性の数が十分ではないことが考えられる．Tromp ら扱う機会は増している．各種業務システムにおいても[7] は 3-gram にグラフに基づく長距離の素性を加えることで，6 言語のツイートの言語判定に対して 95〜ユーザにより生成された短い文章リソースは少なくない．また短文の言語判定が可能であれば，複数言語を用いて記述された文書の言語判定において，段落ない98%の精度を上げている．
単語辞書を用いる手法も考えられるが，巨大な辞書し文ごとに区切って言語判定を行わせるなど，幅広いをメンテナンスしなければならないという難点がある．

応用も考えられる．しかし，短文を対象とした言語判

言語判定の対応言語数は，研究論文の多くは欧文言定の研究はその必要性に比して少ないのが現状である．

語を中心に 2〜8 言語程度であり，最大でも 20 言語前

本研究では，極大部分文字列を素性として用いるこ後である．一方，ライブラリとして提供されている言とで，twitter のようなノイズの多い短文でも 17 言語語判定器の対応言語数は，Tika[1] が 27，langdetect[5]に対して 99%以上という実用的な精度で言語判定を行が 53, CLD[2] が 76 と全般に十分多い．

えることを示す．
第 2 章では既存の関連研究について，第 3 章では極3

極大部分文字列による文書分類

大部分文字列を使った文書分類について概説する．第岡野原ら [11] は極大部分文字列を素性に用いた文書

4 章で本研究における言語判定の手法を述べ，第 5 章
では評価のために作成したコーパスについて解説する．

分類を提案した．極大部分文字列とは，部分文字列間に導入されるある半順序関係における極大元を指す．

― 547 ―

Copyright(C) 2012 The Association for Natural Language Processing.
All Rights Reservedその定義は以下の通りである．

テキストの正規化

4.2

文字列 T の i 番目から j 番目までの部分文字列を Tij と書く．T の相異なる部分文字列 t1 , t2 の間にt1 < t2 の関係があるとは，0 ≤ ∃ k ≤ l2 − l1 , ∀ i s.t.
Ti(i+l1) = t1 ⇒ T(i−k)(i−k+l2) = t2 を満たすことと定義する．ただし ln は tn の長さとする．この順序関係における極大元を極大部分文字列と呼ぶ．
順序関係を持つ文字列同士は部分文字列内での出現頻度が常に一致することから，それらの素性 (出現の正規化のアプローチは各言語の特性に対するものと，twitter などマイクロブログの特性に対するものとの大きく２つに分かれる．
なお，本章では各言語の文字利用に関する考察をUnicode に基づいて解説する．Unicode のコードポイ
ントは U+0049 などと記す．
4.2.1

トルコ語を考慮した小文字化有無ないし頻度) の線形結合は順序関係により導出さ

ラテン文字言語に対する正規化として，小文字化はれる同値類によってまとめられる．ここで特に同値類モデルの縮小と訓練データの節約に効果がある．ただの代表元として極大部分文字列を選ぶと，全部分文字し多言語横断においては，大文字小文字が必ずしも一列を素性としたロジスティック回帰は，極大部分文字対一ではない．

列を素性とするそれと同値であることがわかる．
モデルの同値性は崩れるが，訓練集合を十分大きくとI(U+0049) の小文字はほとんどの言語で i(U+0069)
で あ る が ，ト ル コ 語 や ア ゼ ル バ イ ジャン 語 で は(U+0131) で あ る (表 1)．そ の た め 本 研 究 で は ，ることで近似できると仮定する．

I(U+0049) を小文字化の対象から除外した．

訓練集合に含まれない文字列を加えた場合，一般に出現頻度が 2 回以上の極大部分文字列の抽出は拡張

表 1: 大文字-小文字対応

接尾辞配列を用いることで入力長に対して線形時間で行うことができる．また素性列は TRIE 木に格納することで，任意のテキストからの素性の抽出も高速に行うことができる [11]．

大文字

小文字

トルコ語以外I(U+0049)

i(U+0069)

トルコ語

I(U+0049)(U+0131)(U+0130)i(U+0069)

短文言語判定4

本研究のターゲットは，ラテン文字言語の 3 単語以上の文に対して実用的な精度で言語判定を行うことと4.2.2

した．実際の対象言語は表 2 に挙げる．

ルーマニア語向けの正規化

言語に本来割り当てられた文字とは異なる文字 (コーラテン文字を使用する言語は最も数が多く，判別のドポイント) が慣習的に利用されていることもある．例

難易度も高い．したがってラテン文字言語において高えばペルシャ語ではい精度で言語判定可能であれば，他の文字種の言語ににも拡張可能であると期待している．複数の文字種を用トを中心に広く利用されている．これはアラビア文字

いたテキストの言語判定では，文字種ごとにテキスト圏で普及している CP1256 文字セットにを分割することを想定している．

が含まれないためと考えられる．これを考慮した正規

4.1(U+06CC, Farsi yeh) の代わり(U+064A, Arabic yeh) がペルシャ語の新聞サイ(U+06CC)化を行うことでペルシャ語の判定精度が向上する [9]．

モデル

言語判定は言語ラベルを付与済みの教師付きコーパ
スの分類問題として定式化される．本研究では，テキスト全体を連結した文字列から極大部分文字列を抽出し，それを素性とした多クラスロジスティック回帰モデルにより分類器を構築した．
パラメータの学習には確率的勾配降下法を用いた．

Tsuruoka らの提案する Cumulative Penalty[8] を用いた L1 正則化によってモデルのサイズを抑える．
また後述の通り，言語ごとにデータ量の偏りがあるため，各言語ごとに訓練データのリサンプリングを行うことで，最大件数の言語にデータ件数を揃えた．

同様に，ルーマニア語では (U+0219), (U+021B)
等が正書法の定める文字だが，実際には (U+015F)
や (U+0163) の方が多く使用されている．これは(U+0219) らの文字が Unicode に採録されたのが2001 年，実際に利用可能な PC が普及し始めたのが2007 年と遅い時期であったため，早くより利用可能であった (U+015F) らでの代用が定着してしまったためと考えられる．
一方で (U+015F) はトルコ語やアゼルバイジャン語でも利用される文字ゆえ，本研究では (U+0219) らを (U+015F) らに置き換えるという正規化を行った．

― 548 ―

Copyright(C) 2012 The Association for Natural Language Processing.
All Rights Reserved4.2.3

表 2: データセット

ベトナム語向けの正規化

ベトナム語は 6 種類の声調を持ち，かつ声調記号が言語名

訓練データ

テストデータ

一般のテキストでも記述される．Unicode には，ベト

チェコ語

4,583

5,329

ナム語の声調記号付きアルファベットが U+1EA0 かデンマーク語ら U+1EF9 という広い範囲に割り当てられているが，

ドイツ語

5,499
44,115

5,484
9,665

44,00744,965
4,577

9,617
10,127
4,491

44,17544,892

10,067
10,18444,19744,972
7,516

10,1609,681
8,510

12,861
44,488

10,070
9,460

トルコ語

6,118
44,34344,7985,904
9,95010,309

ベトナム語

10,415

10,494

計496,521

149,502

それら以外にも「アルファベット＋声調記号文字」の英語合字として表現することも可能である．実際に twitter

スペイン語

ではそれら 2 種類の表記がほぼ同割合で出現する．そフィンランド語のため，本研究では合字を 1 コードポイントに変換すフランス語る正規化を行った．

4.2.4

インドネシア語
イタリア語

マイクロブログ固有表現の正規化

オランダ語

テキスト内の@ユーザ名，ハッシュタグと URL はノルウェー語

言語判定におけるノイズとなるので，除去した．

ポーランド語また，マイクロブログでは感情の表現や強調のためポルトガル語に文字を重ねることがよく用いられている．本研究

ルーマニア語では同じ文字が 3 回以上連続した場合に 2 文字に縮スウェーデン語めるという正規化を行った．Brody ら [3] の提案する

twitter 表現の正規化を用いて生成した辞書を併用すれば性能の向上が期待できるので，今後の課題にしたい．

5

twitter コーパスの作成
言語判定器の学習・評価のために必要な 17 言語の6

短文コーパスセットを以下の手順で作成した (表 2)．
フランス語を例に説明する．twitter の Streaming

API1 の sample メソッド (全ツイートの 1%を取得可能) を使ってツイートを収集，Paris タイムゾーンのツイートを抽出した．全体の中ではフランス語のツイー
トは 1%未満であるが，Paris タイムゾーンに限ると50〜60%となり，抽出の難易度が大きく下がる．
それらを langdetect[5] で言語判定し，以降は手作業でフランス語と判定されたデータからフランス語ではないツイートを除外し，フランス語以外と判定されたデータからフランス語のツイートを拾った．
本手順をラテン文字以外の言語に適用するに当たっては，twitter で十分多くつぶやかれている言語が少ないという問題がある．たとえばキリル文字言語ではロシア語以外の流量は非常に少なく，まとまって収集可能なのはウクライナ語程度である．アラビア文字言語についても，アラビア語以外は十分な量のコーパスを確保できる見込みが薄い．
ベンガル語などのインド系の言語も twitter 上の利用割合はごく少量である．ただしこれらは文字と言語が 1 対 1 に対応するものが多く，既存手法でも十分高い精度で判定可能なため，本研究の対象外である．

評価
モデルの実装は Python で行い，ソースコードと訓練後のモデルは MIT ライセンスで公開した2 ．
極大部分文字列の抽出には，訓練データを U+0001で結合した文字列に対して esaxx3 を適用した．そちらのモジュールも公開準備中である．
訓練データを用いて提案手法 (LDIG) の学習を
行 い ，テ ス ト デ ー タ に つ い て 言 語 判 定 を 行った ．
ベースラインは CLD(76)[2] と Tika(27)[1], そしてlangdetect(53)[5] である (括弧内は対応言語数)．ただし CLD はインドネシア語をマレー語と判定するためそれらを同一視し，Tika はチェコ語，インドネシア語，トルコ語，ベトナム語に対応していないため 13 言語分についてのみ評価した．また langdetect は全 53 言語を判定対象とした場合 (LD53)，本研究において作成した訓練データを用いて言語プロファイルを生成した場合 (LDtw) についてそれぞれ評価した．その結果は表 3 である．本提案手法は 17 言語について平均で99.1%の精度で言語判定を行い，比較手法のいずれよりも高い精度を示した．
Tromp らの提案する LIGA[7] は 6 言語のツイートを 95〜98%の精度で判定したと報告している．評価
2 https://github.com/shuyo/ldig/

1 https://dev.twitter.com/docs/streaming-api

3 http://code.google.com/p/esaxx/― 549 ―

Copyright(C) 2012 The Association for Natural Language Processing.
All Rights Reserved

扱ったが，アプリケーションが持つメタデータも素性

表 3: 評価結果として組み込むことでさらなる精度の向上が見込める．
言語名LDIG

チェコ語

CLD Tika LD53 LDtw

これもあわせて今後の課題にしたい．

99.7
96.7

95.3
90.4

—
53.3

95.5
95.5

99.8
91.6

参考文献

99.5
98.7

96.7
97.4

59.1
55.7

87.3
89.3

94.1
95.4

98.9
99.4
99.5

90.7
99.4
94.5

45.0
94.2
67.5

94.9
98.8
96.2

98.1
99.6
98.4

99.8
99.6

92.7
93.8

—
87.0

89.6
96.5

98.9
98.1

[3] Samuel Brody and Nicholas Diakopoulos.
Cooooooooooooooollllllllllllll!!!!!!!!!!!!!!
Using

98.3
97.1
99.8

92.8
74.3
97.9

64.4
68.5
89.0

68.6
96.3
98.3

97.0
96.3
99.8

Word Lengthening to Detect Sentiment in Microblogs. In EMNLP, pp. 562–570. 2011.

98.8
98.5

88.3
96.0

48.7
82.5

90.4
93.7

97.1
98.3

ベトナム語

99.0
99.9
99.8

96.5
97.4
98.9

76.1
——

96.7
97.8
98.9

98.2
99.5
99.4

全体

99.1

93.7

69.1

92.9

97.7

デンマーク語
ドイツ語
英語
スペイン語
フィンランド語
フランス語
インドネシア語
イタリア語
オランダ語
ノルウェー語
ポーランド語
ポルトガル語
ルーマニア語
スウェーデン語
トルコ語

用のデータセット (9066 件) が公開されており4 ，これ[1] Apache Tika, URL: http://tika.apache.org/.
[2] chromium-compact-language-detector,

http://code.google.com/p/chromium-compactlanguage-detector/.

[4] William B Cavnar and John M Trenkle. NGram-Based Text Categorization. Ann Arbor
MI, Vol. 48113, No. 2, p. 4001,[5] Shuyo Nakatani.
Language Detection Library for Java,
2010,
URL:
http://code.google.com/p/language-detection/.
[6] P. Sibun and J.C. Reynar. Language identification: Examining the issues. In 5th Symposium on Document Analysis and Information
Retrieval, pp. 125–135. 1996.

を用いることで [7] の結果と比較が可能である．そのデータセットについて本手法で言語判定を行った場合も 99%以上の精度で判定が可能であった (表 4)．モデルは 17 言語で学習したものをそのまま用いた．

URL:[7] Erik Tromp and Mykola Pechenizkiy. GraphBased N-gram Language Identification on Short
Texts. In Belgian-Dutch Conference on Machine
Learning (Benelearn), pp. 27–35, 2011.

表 4: LIGA[7] のデータセットを使った評価

言語名件数

正解数

正解率

ドイツ語

1468
1488

1479
1505

99.3
98.9

1531
1542

1562
1551

98.0
99.4

オランダ語

1531
1423

1539
1430

99.5
99.7

[9] 中谷秀洋. ナイーブベイズによる言語判定. 自然

全体

8985

9066

99.1

言語処理勉強会＠東京 (TokyoNLP), No. 2, URL:

英語
スペイン語
フランス語
イタリア語

[8] Y. Tsuruoka, J. Tsujii, and S. Ananiadou.
Stochastic gradient descent training for l1regularized log-linear models with cumulative
penalty. In ACL, 2009.

http://www.slideshare.net/shuyo/langdetect.

7

おわりに極大部分文字列を素性とするロジスティック回帰に[10] 中谷秀洋. ∞-gram による短文言語判定. 自然言語処理勉強会＠東京 (TokyoNLP), No. 8,
URL: http://www.slideshare.net/shuyo/gram10286133.

より，twitter のようなノイズの多い短文でも 99%以上という実用的な精度で言語判定を行えることを示した．ただし実用にあたっては，精度を維持しつつモデルを縮小することが課題となる．
本研究では純粋に文書から抽出可能な素性のみを[11] 岡野原大輔, 辻井潤一. 全ての部分文字列を考慮した文書分類. 自然言語処理研究会 (SIGNL), No.
187,

4 http://www.win.tue.nl/ mpechen/projects/smm/― 550 ―

Copyright(C) 2012 The Association for Natural Language Processing.
All Rights Reserved