質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

1074閲覧

共起行列から総単語数を取り出す処理について

kontikuwa

総合スコア26

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2021/06/14 21:16

ゼロからつくディープラーニング2の2章をやっていて疑問に思ったことがあります。

python

1# 参考材料 2 3text = 'You say goodbye and I say hello.' 4 5↓上のテキストの共起行列 6C = [[0 1 0 0 0 0 0] 7 [1 0 1 0 1 1 0] 8 [0 1 0 1 0 0 0] 9 [0 0 1 0 1 0 0] 10 [0 1 0 1 0 0 0] 11 [0 1 0 0 0 0 1] 12 [0 0 0 0 0 1 0]] 13 14# ppmiの式 15np.log2(C[x,y]*N / (C[x]*C[y])) 16# ※Nは総単語数、Cは共起行列です。

のように、ゼロからつくディープラーニング2の2章に書いてあったのですが、そこでppmiを作るために、総単語数Nを取得するためのコードが

python

1N = np.sum(C)

と書いてあったのですが、これではCの中身の1を全て合計するので14
になってしまいます。しかし、'You say goodbye and I say hello.'の総単語数はピリオドも含めて、8(7?)です。なので、14は総単語数ではないのではないかと思いました。なぜ、N = np.sum(C)で、総単語としているのかを教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ある種の近似が入っていると正誤表で説明されています。
https://github.com/oreilly-japan/deep-learning-from-scratch-2/wiki/errata

投稿2021/06/14 23:52

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kontikuwa

2021/06/15 00:41

ありがとうございます。助かりました。 あとできれば、正誤表に書いてあることをわかりやすく解説していただけると嬉しいです。これを読んだだけでは無能なのでよくわからんなくて。 Nが共起行列の縦と横全てからとってきた値であることだけは分かったんですけど、この本に「Nはコーパスに含まれる単語数」と書いてあったのですが、それを実装のところでは違うN(共起行列の縦横全ての値)を使って良いのでしょうか?
quickquip

2021/06/15 02:10 編集

本来の単語数をN(8)とすると、ここで近似として使ってるのは 2N-2(14) です。 ppmiは「定数が足されている」ようにでてくるんじゃないかと思いました。 コーパスが大きいと、Nが大きくなるからそんなに気にならない? ということですかね。 もうちょっと考えてみるか、実際に違いを見比べるかしないと、ハッキリとは言えないですが。
kontikuwa

2021/06/15 02:15

ありがとうございます。今しっかり読んでみたのですが、自分は無能なため、よくわからないんで気にしなくてもいいですかね?
quickquip

2021/06/15 02:20 編集

> 本来の単語数をN(8)とすると、ここで近似として使ってるのは 2N-2(14) です。 は納得できますか?
quickquip

2021/06/15 02:19

log の計算に関する知識は一通りありますか?
kontikuwa

2021/06/15 02:41

logの計算に関する知識はあります。 なぜ近似として2N-2(14)を扱っているのかがよくわからなくて、教えていただけるのであれば教えていただきたいです
kontikuwa

2021/06/15 02:43 編集

本来の単語数N(8)と2N-2(14) で全然数が違うのでよくわからなくて
kontikuwa

2021/06/15 02:46

8だとダメなんでしょうか?無能すぎてわかりません。
quickquip

2021/06/15 03:27

"共起行列があればだいたい近似できるので共起行列だけあればいい"のは、まぁそうかな、程度には思います。(ほんとうにはしっかり考えてないといけないですが) このあたりを回答に追記すればいいのかもですね。 8を直に使わない理由はわかりません。コーパスが大きくなる(GB〜TBオーダー)と、単語数を共起行列と別に出すのが大変とかでしょうか? "でもそんなことあるかなぁ。共起行列を出す難しさよりずっと楽じゃないかなぁ"というのが率直な感覚です。
kontikuwa

2021/06/15 03:36

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問