回答編集履歴

11

 

2022/04/13 13:00

投稿

退会済みユーザー
test CHANGED
@@ -24,7 +24,7 @@
24
24
  実は2つ目(bow)は、1つ目の token の、3つの文章における出現回数を表しています。
25
25
 
26
26
  整理すると下記のような表になります。
27
- vocabulary(辞書):
27
+
28
28
  |token(キー)|私|は|の|こと|が|好き|な|あなた|です|ラーメン|富士山|日本一|高い|山|
29
29
  |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
30
30
  |インデックス(値)|0|1|2|3|4|5|6|7|8|9|10|11|12|13|

10

 

2022/04/13 13:00

投稿

退会済みユーザー
test CHANGED
@@ -24,9 +24,10 @@
24
24
  実は2つ目(bow)は、1つ目の token の、3つの文章における出現回数を表しています。
25
25
 
26
26
  整理すると下記のような表になります。
27
+ vocabulary(辞書):
27
- |token|私|は|の|こと|が|好き|な|あなた|です|ラーメン|富士山|日本一|高い|山|
28
+ |token(キー)|私|は|の|こと|が|好き|な|あなた|です|ラーメン|富士山|日本一|高い|山|
28
29
  |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
29
- |インデックス|0|1|2|3|4|5|6|7|8|9|10|11|12|13|
30
+ |インデックス(値)|0|1|2|3|4|5|6|7|8|9|10|11|12|13|
30
31
  |文章1|2|1|1|1|2|2|1|1|1|0|0|0|0|0|
31
32
  |文章2|1|1|0|0|1|1|0|0|1|1|0|0|0|0|
32
33
  |文章3|0|1|0|0|0|0|0|0|1|0|1|1|1|1|
@@ -54,10 +55,10 @@
54
55
  if token not in vocabulary:
55
56
  vocabulary[token] = len(vocabulary)#(1)
56
57
  ```
57
- 見てお分かりの通り、vocabulary=token(形態素)をキーとする辞書として作成しています。
58
+ 見てお分かりの通り、token(形態素)をキーとする辞書として vocabulary を作成しています。
58
59
 
59
- 新しいtokenが見つかる度、その時点のvocablaryの長さを、tokenの値として設定しています。
60
+ 新しい token が見つかる度、その時点の vocablary の長さを、token の値として設定しています。
60
- キーが追加されるたび、辞書vocablaryの長さは1ずつ増えていきます。
61
+ キーが追加されるたび、辞書 vocablary の長さは1ずつ増えていきます。
61
62
  つまりこの部分は、**tokenに一意のindexを付番している**ということです。
62
63
 
63
64
 
@@ -111,4 +112,4 @@
111
112
  |[1]|1|1|0|0|1|1|0|0|1|1|0|0|0|0|
112
113
  |[2]|0|1|0|0|0|0|0|0|1|0|1|1|1|1|
113
114
 
114
- ※インデックスとtokenの関係は、辞書vocabularyによって保持され
115
+ ※インデックスとtokenの関係は、辞書vocabularyによって保持されています

9

 

2022/04/12 22:17

投稿

退会済みユーザー
test CHANGED
@@ -87,7 +87,7 @@
87
87
  これにより、14列×3行の2次元配列が作られます。(冒頭の[0]は初期化する値ですので、中身がゼロで初期化された2次元配列になっています)
88
88
 
89
89
  作成直後のbow(初期化された2次元配列):
90
- |インデックス|[0]|[1]|[2]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10]|[11]|[12]|[13]|
90
+ |インデックス|0|1|2|3|4|5|6|7|8|9|10|11|12|13|
91
91
  |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
92
92
  |[0]|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
93
93
  |[1]|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
@@ -105,7 +105,7 @@
105
105
 
106
106
 
107
107
  処理後のbow:
108
- |インデックス|[0]|[1]|[2]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10]|[11]|[12]|[13]|
108
+ |インデックス|0|1|2|3|4|5|6|7|8|9|10|11|12|13|
109
109
  |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
110
110
  |[0]|2|1|1|1|2|2|1|1|1|0|0|0|0|0|
111
111
  |[1]|1|1|0|0|1|1|0|0|1|1|0|0|0|0|

8

  

2022/04/12 22:16

投稿

退会済みユーザー
test CHANGED
@@ -29,13 +29,13 @@
29
29
  |インデックス|0|1|2|3|4|5|6|7|8|9|10|11|12|13|
30
30
  |文章1|2|1|1|1|2|2|1|1|1|0|0|0|0|0|
31
31
  |文章2|1|1|0|0|1|1|0|0|1|1|0|0|0|0|
32
- |文章3|0|1|0|0|0|0|0|0|1|0|1|1|1|1
32
+ |文章3|0|1|0|0|0|0|0|0|1|0|1|1|1|1|
33
33
 
34
34
  ・2行目は、各 token に対して、(数字がかぶらないように)割り振った一意のID番号のようなものです。
35
35
  ・3行目以降は、各文章における各 token の出現回数を表しています。
36
36
 
37
37
  ---
38
- 質問文のコードは、言ってしまえば結局上の表を作る処理に過ぎません。
38
+ 質問文のコードは、言ってしまえば結局上のような表を作る処理に過ぎません。
39
39
 
40
40
  ではなぜこのように整理するか=長期的な目的はなにかというと、
41
41
  ・各文章を特徴づけている単語を抽出し、文書の類似度を比較可能にする
@@ -84,8 +84,16 @@
84
84
  これによって
85
85
  bow = [[0] * 14 for i in range(3)]
86
86
  となります。
87
- これにより、14列×3行の2次元配列が作らます。(中身がゼロで初期化された2次元配列になます。冒頭の[0]は初期化する値です
87
+ これにより、14列×3行の2次元配列が作らます。(冒頭の[0]は初期化する値ですので、中身がゼロで初期化された2次元配列になっています)
88
88
 
89
+ 作成直後のbow(初期化された2次元配列):
90
+ |インデックス|[0]|[1]|[2]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10]|[11]|[12]|[13]|
91
+ |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
92
+ |[0]|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
93
+ |[1]|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
94
+ |[2]|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
95
+
96
+  
89
97
  あとは、直後の
90
98
  ```
91
99
  for i,tokenized_text in enumerate(tokenized_texts):
@@ -95,3 +103,12 @@
95
103
  ```
96
104
  の部分で、各文章ごとに token の出現回数をカウントし、2次元配列に格納しています。
97
105
 
106
+
107
+ 処理後のbow:
108
+ |インデックス|[0]|[1]|[2]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10]|[11]|[12]|[13]|
109
+ |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
110
+ |[0]|2|1|1|1|2|2|1|1|1|0|0|0|0|0|
111
+ |[1]|1|1|0|0|1|1|0|0|1|1|0|0|0|0|
112
+ |[2]|0|1|0|0|0|0|0|0|1|0|1|1|1|1|
113
+
114
+ ※インデックスとtokenの関係は、辞書vocabularyによって保持される。

7

 

2022/04/12 22:10

投稿

退会済みユーザー
test CHANGED
@@ -84,7 +84,7 @@
84
84
  これによって
85
85
  bow = [[0] * 14 for i in range(3)]
86
86
  となります。
87
- つまり、要素0で初期化された、14列3行の2次元配列ます。
87
+ これにより、14列×3行の2次元配列てます。(中身がゼロで初期化された2次元配列になります。冒頭の[0]は初期化する値です)
88
88
 
89
89
  あとは、直後の
90
90
  ```
@@ -93,5 +93,5 @@
93
93
  index = vocabulary[token]
94
94
  bow[i][index] += 1
95
95
  ```
96
- の部分で、各文章ごとに token の出現回数をカウントしています。
96
+ の部分で、各文章ごとに token の出現回数をカウントし、2次元配列に格納しています。
97
97
 

6

 

2022/04/12 15:38

投稿

退会済みユーザー
test CHANGED
@@ -35,7 +35,7 @@
35
35
  ・3行目以降は、各文章における各 token の出現回数を表しています。
36
36
 
37
37
  ---
38
- 質問文のコードは、言ってしまえば結局の表を作る処理に過ぎません。
38
+ 質問文のコードは、言ってしまえば結局の表を作る処理に過ぎません。
39
39
 
40
40
  ではなぜこのように整理するか=長期的な目的はなにかというと、
41
41
  ・各文章を特徴づけている単語を抽出し、文書の類似度を比較可能にする

5

 

2022/04/12 15:36

投稿

退会済みユーザー
test CHANGED
@@ -35,8 +35,9 @@
35
35
  ・3行目以降は、各文章における各 token の出現回数を表しています。
36
36
 
37
37
  ---
38
+ 質問文のコードは、言ってしまえば結局↑の表を作る処理に過ぎません。
38
39
 
39
- なぜこのように整理するか=長期的な目的はなにかというと、
40
+ ではなぜこのように整理するか=長期的な目的はなにかというと、
40
41
  ・各文章を特徴づけている単語を抽出し、文書の類似度を比較可能にする
41
42
  といったようなことです。(TF-IDF等を利用)
42
43
 

4

 

2022/04/12 15:35

投稿

退会済みユーザー
test CHANGED
@@ -62,7 +62,9 @@
62
62
 
63
63
  > (2)コード全体の意味がわかりません。また [0] * n_vocabの意味が特に分かりません。
64
64
 
65
- ` [0] * n_vocab`は、2次元配列の初期化処理です。
65
+ #2の部分は、内包表記を使用した、2次元配列の初期化処理です。
66
+ 参照:
67
+ https://qiita.com/oyoshi0022/items/7475951f465d20ad4970#%E8%A7%A3%E6%B1%BA%E6%B3%95
66
68
 
67
69
  ```
68
70
  #単語の出現回数をカウントするためのループ

3

 

2022/04/12 15:29

投稿

退会済みユーザー
test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  なぜこのように整理するか=長期的な目的はなにかというと、
40
40
  ・各文章を特徴づけている単語を抽出し、文書の類似度を比較可能にする
41
- といったようなことです。
41
+ といったようなことです。(TF-IDF等を利用)
42
42
 
43
43
  この目的のため、**文書の集合/文書/形態素を、一定のルールでもって、計算しやすいように数値化し整理している**、ということです(ベクトル化)
44
44
 

2

 

2022/04/12 15:26

投稿

退会済みユーザー
test CHANGED
@@ -81,7 +81,7 @@
81
81
  これによって
82
82
  bow = [[0] * 14 for i in range(3)]
83
83
  となります。
84
- つまり、要素0で初期化された、14列、3行の2次元配列作っている、ということです。
84
+ つまり、要素0で初期化された、14列、3行の2次元配列作っていす。
85
85
 
86
86
  あとは、直後の
87
87
  ```
@@ -90,5 +90,5 @@
90
90
  index = vocabulary[token]
91
91
  bow[i][index] += 1
92
92
  ```
93
- で各文章ごとに token の出現回数を、上記の2次元配列 bowの要素に格納していっています。
93
+ の部分各文章ごとに token の出現回数をカウントしています。
94
94
 

1

 

2022/04/12 15:23

投稿

退会済みユーザー
test CHANGED
@@ -53,7 +53,7 @@
53
53
  if token not in vocabulary:
54
54
  vocabulary[token] = len(vocabulary)#(1)
55
55
  ```
56
- 見てお分かり通り、vocabulary=token(形態素)をキーとする辞書として作成しています。
56
+ 見てお分かり通り、vocabulary=token(形態素)をキーとする辞書として作成しています。
57
57
 
58
58
  新しいtokenが見つかる度、その時点のvocablaryの長さを、tokenの値として設定しています。
59
59
  キーが追加されるたび、辞書vocablaryの長さは1ずつ増えていきます。