{NLP}O’REILLY2.8_8単語の構成に関する条件付き頻度分布

O’reilly NLP with Python演習問題2.8_8 TODO 名前コーパス(names)から、名前の頭文字の男女別頻度分布を調べる アルファベットごとの出現回数を調べる 今回グラフは棒グラフがよさそうですが、NLTKのplot()で棒グラフを生成できるのかわからなかったので、matplotlibを使って生成しようと思います。 そのために、まずは、X軸、Y軸に使うために、出現回数の配列をつくります。 forの入れ子が多くて大変頭の悪そうなコードではあるのですが……。 出力結果: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’] [443 246 469 308 251 144 213 124 83 293 276 332 484 158 66 121 9 247… Continue Reading {NLP}O’REILLY2.8_8単語の構成に関する条件付き頻度分布

{NLP}Swadeshリストの活用

NLTKにはSwadeshリストが含まれています。今回はSwadeshリストを用いて言語間の語彙比較をしてみます。 Swadeshリストは、どの文化での生活でも最初の段階で発生する、基本的な語彙を並べたリストで、比較言語学ではこのSwadeshリストに含まれる語彙がどの程度近いかを調べることで、言語間の距離(どの段階で分かれた言語か)が分かったりします。 大学の頃は、マイナーな言語のSwadeshリストは、英語のSwadeshリストを見ながらそれに対応する単語を辞書などを用いて地道に調べた記憶もあります。 NLTKSwadeshリストは24の言語しかなく、マイナーな言語については調べられません。 しかし、Swadeshリストとは別に、NLTKにはShoeboxとToolboxという語彙目録が存在し、ここにはより多くの言語の情報が詰まっているそうなので、そちらも活用するとさらに幅を広げられるかもしれません。 ShoeboxとToolboxについては、また改めて別のエントリで触れたいと思います。 (※Swadeshリストについてはこちらを参照:Appendix:Swadesh lists│Wiktionary) Swadeshリストの中身を見る インポート from nltk.corpus import swadesh 言語一覧を見る wadesh.fileids() 出力結果: [u’be’, u’bg’, u’bs’, u’ca’, u’cs’, u’cu’, u’de’, u’en’, u’es’, u’fr’, u’hr’, u’it’, u’la’, u’mk’, u’nl’, u’pl’, u’pt’, u’ro’, u’ru’, u’sk’, u’sl’, u’sr’, u’sw’, u’uk’] ISO639言語コードで言語名が表示されます。 (※言語コードについてはこちらを参照:ISO 639言語コード│Cyber Librarian 特定言語のSwadeshリストを見る swadesh.words(‘de’)[:20] 出力結果: [u’ich’, u’du, Sie’, u’er’, u’wir’, u’ihr, Sie’,… Continue Reading {NLP}Swadeshリストの活用

{NLP}O’REILLY2.8_5名詞のメロニム/ホロニムを調べる

O’reilly NLP with Python演習問題2.8_5 TODO 任意の名詞のホロニムとメロニムの関係を調べる メロニム/ホロニムとは 意味により整列された英語辞書WordNet(シソーラスのようなもの)の、関係の表し方には同義語集合と、語彙関係という階層構造があります。 後者の語彙関係における要素同士の関係にメロニムとホロニム含まれます。 メロニム(meronyms) ある要素からそれを含む構成要素への関係 「幹(trunk)」「枝(limb)」が「木(tree)」の一部分である場合、”木の(部分的/part)メロニム”は、すなわち「幹」「枝」を意味します。 「心材(heartwood)」、「辺材(sapwood)」もまた別の観点から「木」の一部分です。”木の(材質的/substance)メロニム”は、すなわち「心材」「辺材」を意味します。 ホロニム(holonyms) 構成要素とそれを含む要素との関係 「木」が集まると「森(forest)」になる場合、”木のホロニム”は、すなわち「森」を意味します。

{NLP}O’REILLY2.8_4単語の出現回数グラフの生成

O’reilly NTP with Python演習問題2.8_4 TODO NLTKコーパスstate_union(『State of the Union addresses(一般教書演説)』)について、’men’,’women’,’people’の出現回数を数える。 上記3単語について、時代による変化のグラフを生成する。 テキスト中の特定語の出現回数を調べる 出力結果: 1945-Truman.txt / men: 2 , women: 2 , people: 10 1946-Truman.txt / men: 12 , women: 7 , people: 49 1947-Truman.txt / men: 7 , women: 2 , people: 12 (…) 2004-GWBush.txt / men: 7 , women: 8 , people: 21 2005-GWBush.txt… Continue Reading {NLP}O’REILLY2.8_4単語の出現回数グラフの生成

{NLP}テキストコーパスへのアクセス

環境等 win 10 python2.7 python lib: nltk.book python lib: nltk NLTK提供コーパスの使用方法 NLTKではさまざまなコーパスをダウンロードして使用することができる。 以下のページで利用可能なコーパスの一覧を見ることができ、bookを除いて、コーパスのidを指定することで利用できる。 from nltk.corpus import <id> NLTKコーパス一覧:http://www.nltk.org/nltk_data/ 以下、主なコーパスと利用方法を列挙する。 NLTKで定義済みのコーパス from book import * text1, text2, … ,text9という名前のテキストオブジェクトが呼び出せる。 グーテンベルグコーパス 電子書籍アーカイブProject Gutenberg (http://www.gutenberg.org/)から選ばれた小さなテキスト群が含まれる。 ファイル一覧を取得する。 import nltk nltk.corpus.gutenberg.fileids() もしくは from nltk.corpus import gutenberg gutenberg.fileids() 出力結果: [u’austen-emma.txt’, u’austen-persuasion.txt’, u’austen-sense.txt’, u’bible-kjv.txt’, u’blake-poems.txt’, u’bryant-stories.txt’, u’burgess-busterbrown.txt’, u’carroll-alice.txt’, u’chesterton-ball.txt’, u’chesterton-brown.txt’, u’chesterton-thursday.txt’, u’edgeworth-parents.txt’,… Continue Reading {NLP}テキストコーパスへのアクセス

{NLP}特定の単語を含む一文を抽出する

O’reilly NTP with Pythonの演習問題1.8_17 環境等 win 10 python2.7 python lib: nltk.book 関数index() index()を使って特定単語の添字を求めたあと、前後の「.」までの単語を一文とみなし、出力します。 色々な方法があると思います。これで最適なのかわかりませんが……。 ここではtext9(‘The Man Who Was Thursday’by G . K . Chesterton 1908)から、’sunset’を含む一文を抽出してみます。 出力結果: CHAPTER I THE TWO POETS OF SAFFRON PARK THE suburb of Saffron Park lay on the sunset side of London , as red and ragged as a cloud of… Continue Reading {NLP}特定の単語を含む一文を抽出する

{NLP}コロケーションの抽出

O’reilly NTP with Pythonの演習問題1.8_7 環境等 win 10 python2.7 python lib: nltk.book コロケーションとは 頻繁に共起する単語の組み合わせ。 類似した意味を持つ単語での置き換えがしづらいもので、バイグラムのうち頻繁に出現するものとも言えます。 関数collocations() collocations()では、バイグラム(bigrams())のうち、個々の単語の出現頻度から期待される出現頻度よりも大きいものを抽出します。 NLTK Bookモジュールtext5(Chat Corpus)から、コロケーションを抽出してみます。 text5.collocations() 出力結果: wanna chat; PART JOIN; MODE #14-19teens; JOIN PART; PART PART; cute.-ass MP3; MP3 player; JOIN JOIN; times .. .; ACTION watches; guys wanna; song lasts; last night; ACTION sits; -…)…- S.M.R.; Lime Player; Player… Continue Reading {NLP}コロケーションの抽出

{NLP}分散プロットの生成

O’reilly NLP with Pythonの演習問題1.8_6 環境等 win 10 python2.7 python lib: nltk.book 分散プロットとは 特定の単語がテキスト中のどの位置に出現するかを表示した図です。 例えば、歴代大統領就任演説を全て繋げたテキストの中で、freedomやdemocracyといった語の出現頻度を、時間の経過とともに見ることができます。 関数dispersion_plot() NLTKのbookモジュールのtext2にある『Sence and Sensibility (Jane Austen)』から’Elinor’,’Marianne’,’Edward’,’Willoughby’の4人の登場人物の分散プロットを表示してみます。 text2.dispersion_plot([‘Elinor’,’Marianne’,’Edward’,’Willoughby’]) 出力結果: 以上の図が出力される。 それぞれの名前の出現位置から、ウィロビーとマリアン、エドワードとエリナーに、物語上深い関係があると推測することができます。

{Python}GPGPUで行列積を求める

GPGPUで行列積を求めて行きたいと思います。PyOpenCLについてはあまり理解していないところが多いので、正確ではないと思います。 ただ、私はこう理解していて、こうすると動きます、という、メモです……、。 numpyで求める 行列積はnumpyのdotで求めることができます。 a=行列A b=行列B product = numpy.dot(a,b) GPGPUで行列積を求める GPGPUで演算を行うには、 Context Queue Buffer Kernel を記述することが必要になります。 Context どのGPUを使用するかを指定します。 引数にinteractive=Falseで自動選択。 pyopencl.create_some_context(interactive=False) Queue Contextのなかに新しいqueueを作成します。 pyopencl.CommandQueue(context) Buffer ホスト(CPU)とデバイス(GPU)間のデータ受け渡し用のBufferを作成します。 カーネルに引数として渡す行列と、結果を受ける行列を作成 ここでは、-9~9までのランダムの整数からなる4*4の行列を作成 アウトプット行列は行列aと同じ大きさのから行列を作成 size = 4 a = numpy.random.randint(-9, 9, (size,size)).astype(numpy.int32) b = numpy.random.randint(-9, 9, (size,size)).astype(numpy.int32) dest = np.empty(a.shape, dtype=np.int32) bufferの作成 用途によって、READ_ONLY, WRITE_ONLY, READ_WRITEを指定する。 ここではインプットがREAD_ONLY,アウトプットbufferがWRITE_ONLYになっているが、 行列のすべての要素になんらかの演算をする場合など、インプットデータを加工したものを戻り値として得たい場合はREAD_WRITEにする。 hostbufを指定することでホスト->デバイスの転送が自動で行われる。 a_buf = pyopencl.Buffer(context,… Continue Reading {Python}GPGPUで行列積を求める

{Python}GPGPUの導入

このエントリは移管です。 環境等 win 10 GPU Intel HD Graphics 4600 python 2.7 GPGPUとは さまざまな演算を行うCPUに対して、PCにはGPU(graphics processing units)というグラフィック関連の処理を行うための専用ユニットがあります。 そのGPUをグラフィック処理以外の用途に使うことをGPGPU(General-purpose computing on graphics processing units)といいます。 得手不得手はありますが(I/O処理は遅い)、処理の一部をGPGPUで動かすことで演算速度を飛躍的に向上させることができます。 最近GPGPUの勉強をしたので、復習がてら自宅の普通のノートパソコンでもpythonでのGPGPU開発環境設定をしてみます。 GPGPUを実現するためには、以下の並列コンピューティングフレームワークの導入が必要です。 CUDA:NVIDAのGPUのみ OpenCL:Intel、AMD、ARD 以下フレームワークの導入から始めます。 搭載GPUの確認 まずはコンパネ>デバイスマネージャーから自分のGPUの種類を確認します。 Intel HD Graphics 4600というやつでした。 というわけでOpenCLがよさそうです。 OpenCLのインストール まずはこの中から自分のGPUにあったSDKをインストール。 NVIDIA – CUDA Toolkit AMD – AMD APP SDK(Also work with Intel’s) Intel –  Intel SDK for OpenCL Applications Intelだから、Intelがいいかと思ったけど、別で試したのがAMDのグラボで、AMDのSKDを使ったので、今度もAMDにしてみました。 OCL_SDK_Light_AMD.exeをDLしてインストールします。… Continue Reading {Python}GPGPUの導入