入門自然言語処理 正誤表 | mg6tのブログ

mg6tのブログ

ブログの説明を入力します。

オライリー・ジャパンの正誤表

アメリカのO'Reillyには、
各書籍ごとに見つけた間違いを報告するフォームがあるので、
見つけるたびに、その都度報告しているけど、
オライリー・ジャパンにはそのようなフォームがないらしいので、
ここにメモしておいて後でまとめて報告しよう。

--------
p.62 下から4行目
my_textを生成し、

my_textの語彙を生成し、

--------
p.74 下から4行目
ある要素からそれを含む構成要素への関係(メロニム)と、
構成要素とそれを含む要素との関係(ホロニム)である。

ある要素からその要素に含まれる構成要素への関係(メロニム)と、
構成要素からその構成要素を含む要素への関係(ホロニム)である。

「ある要素からそれ「を」含む構成要素」の「を」がおかしい。

原文は
from items to their components (meronyms) or to the things they are contained in (holonyms).
なので、原文に忠実に訳すと、
項目からその構成要素へ(メロニム)、
あるいは、項目からその項目が含まれるものへ(ホロニム)の関係である

原文は、components, items, thingsの3つの関係で説明している
[things] ←ホロニム― [items] ―メロニム→ [components]

訳文は、要素、構成要素の2つの関係で説明してる
[要素] ―メロニム→ [構成要素] 
   ←ホロニム―

--------
誤りというほどではない
p79
演習問題
1.
単語のリストを含んだ変数を

単語のリストを含んだ変数phraseを

原文ではphraseがboldになっているので、変数名

--------
誤りというほどではない
p.79
演習問題
3.
brown.words()とウェブテキスト

brown.words()、あるいは、ウェブテキスト

原文ではor

--------
p.145 中央
シーケンス型以外にも、(list()を用いて)シーケンス型に変換可能なオブジェクトがある。
たとえばFreqDistがそうで、リストに変換することで反復処理を行えるようになる。

この他にも、たとえばFreqDistのように、
シーケンスへの変換(list()を使う)と反復処理が可能なオブジェクトが存在する。

原文は、
Some other objects, such as a FreqDist, can be converted into a sequence (using list()) and support iteration:

シーケンスに変換すること
反復処理が行えることは独立。

シーケンスに変換することは、実行例のこの部分
>>> list(fdist)
反復処理が行えることは、実行例のこの部分
>>> for key in fdist:

変換することで反復処理をするわけではない。

--------
p.80 演習問題の10
イギリスのヴィッキー・ポラードは『遅れてる』

ちょっと意味不明。
原文(BBCの記事のタイトル)は
UK's Vicky Pollards 'left behind'

読者の中にVicky Pollardを知っている人はどれくらいいるのだろうか?
訳注が必要なレベル。

Vicky PollardはBBCのコメディ番組Little Britain中のキャラクタ
Little Britainのウィキペディアの記事

Vicky Pollardではなく、sがついてVicky Pollardsと複数形になっていることから、
Vicky Pollardのような人々(この記事では10代の若い人)
という意味。

left behindに引用符が付いている。
確証はないが、この記事は教育に関する記事なので、
アメリカのNo Child Left Behind Act
のleft behindを指しているのではないだろうか?
だとするとleft behindは落ちこぼれとした方がよくないか?


イギリスのVicky Pollardたちは『落ちこぼれ』
+Vicky Pollardに関する訳注

--------
p.164 下から2行目

これについてのPythonの文法という視点からの異なる例として、
原文は
As another illustration of this aspect of Python syntax,
直訳すると
Python文法のこの側面についての別の例として、

this aspect of Python syntaxは、
変数に*を付ける文法のことで、
この前の部分では関数定義側の意味を説明し、
この後の部分では関数呼び出し側の意味を説明している。
ということで、another illustrationは呼び出し側の例のこと。


Pythonのこの文法(変数名に*を付ける)の別の例として、

この部分は原文の説明もわかりにくく、不十分。

--------
p.164 下から1行目

この関数では引数の数が重要な意味を持つ。
原文は
which operates on a variable number of arguments.

a variable number of argumentsは可変長引数

→この関数の引数の個数は可変である。
or
この関数は可変長引数の関数である。
or
この関数はさまざまな個数の引数で呼び出すことができる。

--------
p.177

>>> statement = "random.randint(0, %d) in vocab" % vocab_size * 2

>>> statement = "random.randint(0, %d) in vocab" % (vocab_size * 2)

こうしないとその後エラーになってうまく実行できない。
これは原書も間違っている。

--------

p.179
virahanka2()で利用したアプローチが、
大きな問題を解く過程で、
より小さな問題を解いている点に注目しよう。

原文は、
Notice that the approach taken in virahanka2() is to solve smaller problems on the way to solving larger problems.

間違いとまでは言えないけれど、
大きな問題を解く地点へ至る途中で小さな問題を解いているということなので、
「大きな問題を解く過程で」というのは、少し意味がずれる感じ。

次のような感じに意訳するとわかりやすいと思う。

virahanka2()で利用したアプローチは、
小さな問題から大きな問題へと順に解いていく点に注目しよう。

--------
p.180 上から3行目

何か変な感じがしたら、訳が1文抜けている。

If not, it computes the result recursively and stores it in the table.
の部分がない。

無駄な計算を行わないようにしている。
そして最後は、値を返す処理である。

無駄な計算を行わないようにしている。
計算結果がまだ保存されていない場合には、
再帰的に結果を計算し、それをテーブルに保存する。
最後に、保存してある結果を返す。

--------

p.185 まとめ2つめ

型とトークン
は、
原文ではtype-token
で、
これは、word type、word tokenのことで、
この本ではp.8、p.9で、それぞれ、
「異なり語」、「トークン(述べ語)」と訳している。
従って、
異なり語とトークン
と訳さないといけない。

--------
p.209 下から4行

限られた語彙中で、新しい単語が出現しないことが保証されていれば、
そうしたタスクはよりうまく働く

語彙が限定されていて、新しい単語が出現しないことが保証されていれば、
そうしたタスクはよりうまく働く

原文
They can perform better with a fixed vocabulary and a guarantee that no new words will appear.

--------
p.221 中程

バイグラムタガーの訓練の間は文中のすべての単語にタグ付けを行うことができるが、
初めて扱う文の場合はずっとひどい結果になってしまうことに注目しよう。

バイグラムタガーは、訓練で扱った文の場合、
その中のすべての単語にタグ付けを行うことができるが、
初めて扱う文の場合はずっとひどい結果になってしまうことに注目しよう。

Notice that the bigram tagger manages to tag every word in a sentence it saw during training, but does badly on an unseen sentence.

訓練の間はというのはおかしい。
訓練の間はすでにタグ付けされた文を使う。
訓練が終わってから、訓練に使った文をタグ付けする場合はうまくいくが、
という意味。

--------
p.224
変数名が間違っている

>>> print nltk.ConfusionMatrix(gold, test)

>>> print nltk.ConfusionMatrix(gold_tags, test_tags)

原文も間違っている。報告済。

--------
p.224
タガーの性能の限界を分析するもう1つの方法は、
人間がタグ付けを行った場合であっても、つけられたタグのうち一致するものは
100%に満たないという点である。

日本語が変。
「…方法は、…という点である。」

「…方法は、…という点に由来する。」

Another way to analyze the performance bound on a tagger comes from the less than 100% agreement between human annotators.

--------
p.226 下から2行め

例5-6はNLTKのプリルタガーの実行例である。

原文では、本文はここまでで、
これ以降の部分は例5-6の中の説明になっているが、
翻訳では本文に入っている。
あえて意図的に本文に入れたのなら、構わないが…。
--------
p.259 図6.3

図の中で、
真陰性と偽陰性が逆になっている。

--------
p.260

混同行列をパーセントでプリントするには、次の1行が必要。

>>> print cm.pp(show_percents=True, sort_by_count=True)

プリントアウト中の
NS | 1.5%

NNS | 1.5%
の間違い。

原書も間違っている。
--------
p.273
6.6.3の最後の段落

生成的モデルと条件付きモデルの違いは
トポロジカルな地図と水平線の写真の違いにたとえることができる。
トポロジカルな地図は広く様々な質問に答えるために利用できるが、
正確なトポロジカルな地図を作るのは、
正確な水平線を作成するよりもはるかに難しい。

まったく意味不明。

原文は、
The difference between a generative model and a conditional model is analogous to the difference between a topographical map and a picture of a skyline. Although the topographical map can be used to answer a wider variety of questions, it is significantly more difficult to generate an accurate topographical map than it is to generate an ac- curate skyline.

まず
topographicalをtopologicalと読み間違えている。
topographical mapは「地形図」であって、「トポロジカルな地図」ではない。

トポロジカルな地図とは何か?
路線図のようなものを思い浮かべたのだろうか?

次に、
skylineは、
山や建物などが空を区切って作る輪郭
(丘や都市などの)空を背景とした輪郭
というような意味である。
要するに2次元(空)に射影したもの。
水平線ではない。

3次元の情報を含む地形図(生成的モデル)を作るのは、
2次元に投影した「スカイライン」(条件付きモデル)を作るよりも難しいという話。

スカイラインは適当な訳語がないので、
訳すとすればこんな感じかな。

生成的モデルと条件付きモデルの違いは
地形図とスカイライン(山や建物などの空を背景とした輪郭)の写真の違いにたとえることができる。
地形図は広く様々な質問に答えるために利用できるが、
正確な地形図を作るのは、
正確なスカイラインを作成するよりもはるかに難しい。

--------

4.11 演習問題19

path_distance()はpath_similarity()の間違い

原文も間違っている。

--------

3.12 演習問題16

>>> from test import msg
>>> msg



>>> from test import monty
>>> monty

原文も間違っている。

--------

原書
Page 241
例の中のコードだけではプリントされない。
混同行列をプリとするには、
かつ、パーセントでプリントするには次のコードが必要。

>>> print cm.pp(show_percents=True, sort_by_count=True)

混同行列のプリントアウト中の
NS | 1.5%

NNS | 1.5%
の間違い