鱼C论坛

 找回密码
 立即注册
查看: 4420|回复: 45

[萌新报道] 帮我写一个使用tensorflow中文命名实体识别系统

[复制链接]
发表于 2023-12-30 23:00:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
帮我写一个使用tensorflow中文命名实体识别系统@FishC

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-30 23:02:23 | 显示全部楼层
帮我写一个训练数集,保存在文本文件中
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:08:47 | 显示全部楼层
命名实体识别的代码怎么使用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:10:48 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 91, in <module>
    x_train, y_train, max_len, word2idx, label2idx = preprocess(data, labels)
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 31, in preprocess
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 31, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 31, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
KeyError: ' '
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:13:02 | 显示全部楼层
代码有错误吗
import tensorflow as tf
import numpy as np
import os


# 读取数据
def load_data(file_path):
    data = []
    labels = []
    with open(file_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    for line in lines:
        line = line.strip().split('\t')
        data.append(line[0])
        labels.append(line[1])
    return data, labels


# 数据预处理
def preprocess(data, labels):
    # 构建词汇表
    word2idx = {}
    for sentence in data:
        for word in sentence:
            if word not in word2idx:
                word2idx[word] = len(word2idx) + 1  # 0为padding的索引
    label2idx = {"B": 0, "I": 1, "O": 2}

    # 将句子转化为索引序列,并对标签进行编码
    data_ids = [[word2idx[word] for word in sentence] for sentence in data]
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]

    # 计算最大句子长度
    max_len = max([len(sentence) for sentence in data_ids])

    # 填充句子长度
    padded_data = tf.keras.preprocessing.sequence.pad_sequences(data_ids, maxlen=max_len, padding='post', value=0)
    padded_labels = tf.keras.preprocessing.sequence.pad_sequences(label_ids, maxlen=max_len, padding='post', value=2)

    return padded_data, padded_labels, max_len, word2idx, label2idx


# 构建模型
def build_model(input_dim, output_dim):
    model = tf.keras.Sequential([
        tf.keras.layers.Embedding(input_dim, 128),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128, return_sequences=True)),
        tf.keras.layers.Dense(output_dim, activation='softmax')
    ])
    return model


# 训练模型
def train(model, x_train, y_train, max_len):
    # 配置训练参数
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    # 训练模型
    model.fit(x_train, y_train, batch_size=32, epochs=10)


# 预测函数
def predict(model, sentence, max_len, word2idx, label2idx):
    sentence = sentence.strip().split(' ')
    input_ids = [word2idx.get(word, 0) for word in sentence]
    input_ids = tf.keras.preprocessing.sequence.pad_sequences([input_ids], maxlen=max_len, padding='post', value=0)

    pred_ids = model.predict(input_ids)[0]
    preds = [label2idx[np.argmax(pred)] for pred in pred_ids]

    result = []
    entity = ""
    for i, pred in enumerate(preds):
        if pred == 0:
            if entity != "":
                result.append(entity)
                entity = ""
        elif pred == 1:
            entity += sentence[i]
        else:
            continue

    return result


if __name__ == '__main__':
    # 加载数据
    data, labels = load_data('data.txt')

    # 数据预处理
    x_train, y_train, max_len, word2idx, label2idx = preprocess(data, labels)

    # 构建模型
    model = build_model(len(word2idx) + 1, len(label2idx))

    # 训练模型
    train(model, x_train, y_train, max_len)

    # 进行预测
    sentence = input("请输入句子:")
    result = predict(model, sentence, max_len, word2idx, label2idx)
    print("识别结果:", result)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:14:18 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 79, in <module>
    x_train, y_train, max_len, word2idx, label2idx = preprocess(data, labels)
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 30, in preprocess
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 30, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 30, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
KeyError: ' '
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:15:57 | 显示全部楼层
重新写一下这个代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:21:53 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 78, in <module>
    x_train, y_train, max_len, word2idx, label2idx = preprocess(data, labels)
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 29, in preprocess
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 29, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 29, in <listcomp>
    label_ids = [[label2idx[label] for label in sentence] for sentence in labels]
KeyError: ' '
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:23:40 | 显示全部楼层
训练数据的格式有例子吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:24:51 | 显示全部楼层
具体一点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:27:18 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1])  # 将标签添加到labels列表中
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:27:44 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1])  # 将标签添加到labels列表中
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:28:17 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1])  # 将标签添加到labels列表中
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:29:50 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1])  # 将标签添加到labels列表中
IndexError: list index out of range   怎么办
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:30:33 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1])  # 将标签添加到labels列表中
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:31:42 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1].split())
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:33:38 | 显示全部楼层
        lines = f.readlines()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:34:19 | 显示全部楼层
Traceback (most recent call last):
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 75, in <module>
    data, labels = load_data('data.txt')
  File "C:\Users\48217\PycharmProjects\课程设计\main.py", line 13, in load_data
    labels.append(line[1].split())
IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:36:36 | 显示全部楼层
请帮我生成大批数据文本data.txt
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 23:37:29 | 显示全部楼层
把代码给我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 06:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表