在tensorflow中,运行word2vec模型时如何用句子分隔?

时间:2016-05-05 14:17:52

标签: tensorflow word2vec

在gensim word2vec中,输入可以是句子列表。但是,在张量流word2vec中,输入是单词列表(将句子连接在一起)。在构建{目标词,上下文词}对时,有没有办法分隔句子? 我使用以下代码: https://github.com/tensorflow/tensorflow/blob/r0.8/tensorflow/models/embedding/word2vec.py

3 个答案:

答案 0 :(得分:4)

听起来你不希望句子末尾的单词与下一个句子开头的单词相关联(属于同一个本地上下文窗口)。如果是这样,有几种不同的方法可以实现这一目标。

你不想对word2vec示例代码进行任何代码修改,最简单的方法是在每个句子的结尾和开头添加一些间隔词。您需要添加与window_size参数一样多的单词。默认window_size5

如果例句是:
The dog jumped over the fence
您需要在开头添加垫片(此处为XYZ)并以以下方式结束:
XYZ XYZ XYZ XYZ XYZ The dog jumped over the fence XYZ XYZ XYZ XYZ XYZ

答案 1 :(得分:0)

该示例使用自定义操作进行数据处理,主要是为了获得最佳性能。您可以自己提供数据,然后根据自己的意愿获得要训练的单词对,使用小型小型飞机可能会慢一些。对于大型小型客车,它不应该太慢,但对于这些类型的型号,您可以通过较小的小型车获得最佳学习进度。

答案 2 :(得分:0)

以下是来自Tensorflow示例的Skip-gram对生成器:https://github.com/tensorflow/tensorflow/blob/r0.9/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

file_uploads = On

如果您运行上面的模块,您将在每个小批量中获得{目标词,上下文词}对。

例如,如果您的数据类似于

# Step 3: Function to generate a training batch for the skip-gram model.
def generate_batch(batch_size, num_skips, skip_window):
  global data_index
  assert batch_size % num_skips == 0
  assert num_skips <= 2 * skip_window
  batch = np.ndarray(shape=(batch_size), dtype=np.int32)
  labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
  span = 2 * skip_window + 1 # [ skip_window target skip_window ]
  buffer = collections.deque(maxlen=span)
  for _ in range(span):
    buffer.append(data[data_index])
    data_index = (data_index + 1) % len(data)
  for i in range(batch_size // num_skips):
    target = skip_window  # target label at the center of the buffer
    targets_to_avoid = [ skip_window ]
    for j in range(num_skips):
      while target in targets_to_avoid:
        target = random.randint(0, span - 1)
      targets_to_avoid.append(target)
      batch[i * num_skips + j] = buffer[skip_window]
      labels[i * num_skips + j, 0] = buffer[target]
    buffer.append(data[data_index])
    data_index = (data_index + 1) % len(data)
  return batch, labels

然后您将获得以下输入和输出对:

data: ['anarchism', 'originated', 'as', 'a', 'term', 'of', 'abuse']

因为跳过克预测了上下文单词:with num_skips = 2 and skip_window = 1: batch: ['originated', 'originated', 'as', 'as', 'a', 'a', 'term', 'term', 'of', 'of', 'abuse', 'abuse', 'first', 'first', 'used', 'used'] labels: ['as', 'anarchism', 'originated', 'a', 'term', 'as', 'a', 'of', 'term', 'abuse', 'of', 'first', 'used', 'abuse', 'against', 'first'] originated -> as

我也有CBOW批量生成器实现。如果你想让我在这里发布,请评论它。