自然言語処理のためのOne Hot Modelについて

自然言語処理のためのOne Hot Modelについて

[[421481]]

この記事はWeChatの公開アカウント「Pythonとビッグデータ分析」から転載したもので、著者はLittle Birdです。この記事を転載する場合は、Python およびビッグデータ分析の公開アカウントにお問い合わせください。

最近仕事が忙しくて、少し前に勾配と微分の問題で本当に悩みました。数学が苦手なので、機械学習やニューラルネットワークは本当に頭が痛いです。リラックスするためにアプリケーションレベルに切り替えたいと思い、自然言語処理を思いつきました。ワンホットモデルは基底とエントリポイントです。リストを行列と辞書に変換する単純な関数のようです。手動で実装することも考えましたが、CountVectorizerを見たらそうではないことがわかったので諦めました。

名前が示すように、ワンホット表現はゼロベクトルから始まり、単語が文または文書に出現する場合、ベクトル内の対応するエントリを 1 に設定します。

文をトークン化し、句読点を無視し、すべての単語を小文字で表すと、サイズ 8 の語彙 {time、fruit、flies、like、a、an、arrow、banana} が得られます。したがって、各単語を 8 次元のワンホット ベクトルで表すことができます。この本では、トークン/単語wのワンホット表現を表すために1[w]を使用します。

フレーズ、文、または文書の場合、圧縮されたワンホット表現は、その構成単語の論理 OR のワンホット表現にすぎません。 「like a banana」というフレーズのワンホット表現は、列が 8 次元のワンホット ベクトルである 3×8 行列になります。また、「折り畳み」またはバイナリ エンコーディングもよく見られます。このエンコーディングでは、テキスト/フレーズが語彙の長さのベクトルで表され、0 と 1 が単語の有無を表します。バナナのようなのバイナリエンコードは [0,0,0,1,1,0,0,1] です。

  1. sklearn.feature_extraction.textからCountVectorizer、TfidfVectorizer をインポートします
  2. Seaborn をSNSとしてインポートする
  3. matplotlib.pyplot をpltとしてインポートします。
  4. 輸入業者
  5. jieba.analyse をインポートする
  6.  
  7. # ワンホット表現はゼロベクトルから始まり、単語が文または文書内に出現する場合は、ベクトル内の対応するエントリを 1 に設定します。
  8. # 英語の処理と表示
  9. corpus = [ 「時は矢のように過ぎ去る。」 「果物はバナナのように飛ぶ。」 ]
  10. one_hot_vectorizer = CountVectorizer(バイナリ= True )
  11. one_hot = one_hot_vectorizer.fit_transform(コーパス).toarray()
  12. sns.heatmap(one_hot, annot= True , cbar= False , yticklabels=[ '文1' , '文2' ])
  13. plt.show()

  1. # 中国語の処理と表示
  2. # ストップワードリストを取得する
  3. def get_stopwords_list(ストップワードファイル):
  4. stopwords = [line.strip() for line in   open (stopwordfile, encoding= 'UTF-8' ).readlines()]
  5. ストップワードを返す
  6.  
  7. # ストップワードを削除する
  8. def movestopwords(文):
  9. stopwords = get_stopwords_list( 'stopwords.txt' ) # ここでストップワードのパスを読み込みます
  10. santi_words = [x for x in sentence if len(x) > 1 and x not  ストップワード]
  11. santi_wordsを返す
  12.  
  13. # コーパス
  14. corpus = [ "シャオミンは中国科学院計算技術研究所で修士号を取得し、その後日本の京都大学で学びました。" ,
  15. 「王暁さんは清華大学で学士号を取得し、南京コンピューター技術研究所で勤務・研究した後、日本の早稲田大学で学びました
  16. 「シャオ・リーは清華大学で学士号を取得し、中国科学院計算技術研究所で修士号を取得し、南京大学で博士号を取得しました。
  17. ニューコーパス = []
  18. コーパス内のstrの場合:
  19. orgwordlist = jieba.lcut(str) # jieba 単語分割
  20. wordlist = movestopwords(orgwordlist) # ストップワードを削除
  21. newword = " " . join (wordlist) # コーパスの必要に応じてスペースで区切る
  22. newcorpus.append(newword) # コーパスの要件に従ってリストに変換します
  23. #ニューコーパス
  24. # [ 'シャオミンは中国科学院計算技術研究所で修士号を取得し、日本の京都大学で学びました'
  25. # 「シャオ・ワン 清華大学南京計算技術学院の学部生 早稲田大学でさらに勉強 日本でさらに勉強
  26. # 「シャオ・リー、清華大学学部生、修士、中国科学院計算技術研究所卒業生、南京大学博士
  27. one_hot_vectorizer = CountVectorizer( binary = True ) # bag-of-wordsデータ構造を作成する
  28. one_hot = one_hot_vectorizer.fit_transform(newcorpus).toarray() # コーパスと行列を変換する
  29. # 以下はホットワードの出力結果です
  30. # one_hot_vectorizer.vocabulary_
  31. # { '暁明' : 4、 '修士' : 14、 '卒業' : 11、 '中国科学院' : 0、 '計算技術研究所' : 15、 '京都大学' : 8、 '進学' : 12、 '暁王' : 6、 '学部' : 10、 '清華大学' : 13、 '南京' : 1、 '仕事' : 7、 '早稲田大学' : 9、 '暁李' : 5、 '博士号' : 3、 '南京大学' : 2}
  32. # one_hot_vectorizer.get_feature_names()
  33. # [ '中国科学院' '南京' '南京大学' '博士号' '暁明' '暁李' '暁王' '仕事' '京都大学日本' 、'早稲田大学、日本' '学部' '卒業' '進学' '清華大学' '修士' 'コンピューティング技術研究所' ]
  34. #ワンホット
  35. # [[1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1]
  36. # [0 1 0 0 0 0 1 1 0 1 1 0 1 1 0 1]
  37. # [1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 1]]
  38. sns.set_style({ 'font.sans-serif' :[ 'SimHei' , 'Arial' ]})
  39. sns.heatmap(one_hot, annot= True , cbar= False , xticklabels=one_hot_vectorizer.get_feature_names(),
  40. yticklabels=[ 'ステートメント 1' , 'ステートメント 2' , 'ステートメント 3' ])
  41. plt.show()

IDF 表現は、ベクトル表現において一般的なシンボルにペナルティを与え、まれなシンボルに報酬を与えます。コーパスのシンボルwのIDF(w)は次のように定義されます。ここでn[w]は単語wを含む文書の数、Nは文書の総数です。 TF-IDF スコアは、TF(w) * IDF(w) の積です。まず、すべてのドキュメント(つまり、n[w] = N)について、IDF(w)は0であり、TF-IDFスコアは0であり、この用語に完全にペナルティが課せられることに注意してください。 2 番目に、用語がまれにしか出現しない場合 (おそらく 1 つのドキュメントにのみ出現する場合)、IDF は log n の最大値になります。

  1. tfidf_vectorizer = TfidfVectorizer() # 単語バッグデータ構造を作成する
  2. tfidf = tfidf_vectorizer.fit_transform(newcorpus).toarray() # コーパスと行列を変換する
  3. # 以下はホットワードの出力結果です
  4. # tfidf_vectorizer.vocabulary_
  5. # '暁明' : 4、 '修士' : 14、 '卒業' : 11、 '中国科学院' : 0、 '計算工学研究所' : 15、 '京都大学' : 8、 '進学' : 12、 '暁王' : 6、 '学部' : 10、 '清華大学' : 13、 '南京' : 1、 '仕事' : 7、 '早稲田大学' : 9、 '暁李' : 5、 '博士号' : 3、 '南京大学' : 2}
  6. # tfidf_vectorizer.get_feature_names()
  7. # [ '中国科学院' '南京' '南京大学' '博士号' '暁明' '暁李' '暁王' '仕事' '京都大学日本' 、'早稲田大学、日本' '学部' '卒業' '進学' '清華大学' '修士' 'コンピューティング技術研究所' ]
  8. # tfidf
  9. # [[0.35221512 0. 0. 0. 0. 0.46312056 0. 0. 0. 0.46312056 0. 0. 0.35221512 0.35221512 0. 0.35221512 0.27352646]
  10. # [0. 0.35761701 0. 0. 0. 0. 0.35761701 0. 0.35761701 0.27197695 0. 0.54395391 0.27197695 0. 0.21121437]
  11. # [0.30443385 0. 0.40029393 0.40029393 0. 0.40029393 0. 0. 0. 0. 0. 0. 0.30443385 0.30443385 0.30443385 0.23642005]]
  12. sns.heatmap(tfidf, annot= True , cbar= False , xticklabels=tfidf_vectorizer.get_feature_names(),
  13. yticklabels=[ 'ステートメント 1' , 'ステートメント 2' , 'ステートメント 3' ], vmin=0, vmax=1, cm

<<:  ロボット: 何を見ているんですか?人間とロボットのアイコンタクトが意思決定を遅らせる、サイエンス誌に掲載

>>:  [技術的な詳細] 自動化プラットフォームの将来はどうなるのでしょうか? IBM Cloud Pak for Business Automationのコンポーネントを詳しく見る

ブログ    
ブログ    

推薦する

CNN の弱点を見つけ、MNIST の「ルーチン」に注意する

[[191828]] CNN は現在非常に人気のあるモデルです。多くの画像検索問題において、CNN ...

機械学習の 3 つの時代の計算パワーの法則をまとめる: 大規模モデルの出現によって何が変わったのでしょうか?

図 1: 1950 年から 2022 年までの 118 の重要な機械学習システムの傾向。私たちは3つ...

Anthropic が「GPT-4 のライバル」言語モデル Claude 2 をリリース: パフォーマンスが向上し、長いテキストもサポート

7 月 12 日のニュース、Anthropic は最近、新しい Claude 2 言語モデルをリリー...

マスク氏、マイクロソフトを非難「OpenAIはあなたのツールではない」

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Xiaomi、自社開発のモバイルディープラーニングフレームワークMACEのソースを公開

6月28日、Xiaomiの人工知能およびクラウドプラットフォーム担当副社長である崔宝秋博士は、オープ...

AIの将来はどうなるのでしょうか?

人間のような知能を実現するという永遠の夢を超えて、AI の将来は消費者市場と商業市場の両方で極めて重...

組織のサイバーセキュリティ向上における人工知能の役割

サイバーセキュリティは重要な戦略的必須事項となっており、今日の企業は進化し続けるサイバー脅威から I...

...

高精度なCVモデルを取得するには? Baidu EasyDLの超大規模ビジュアル事前トレーニングモデルをぜひお試しください

ディープラーニングの分野では、「転移学習」という用語がますます注目を集めています。パフォーマンスが優...

...

自動運転企業のほとんどは失敗する運命にある

「まだ非常に初期段階です。」これは、自動運転技術の現在の開発について、多くの業界関係者がYiou氏に...

...

GPTストア立ち上げの裏側:民間開発者のグループが儲かり、スタートアップのグループが消滅

ノア著制作:51CTO テクノロジースタック(WeChat ID:blog)昨年末に一連の「宮廷闘争...