You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TFRECORD文件转换为可读文本数据(知识图谱项目场景)

TFRecord 转可读文本实现代码(基于原有txt转TFRecord逻辑修改)

以下代码完整保留了原项目的词表加载、参数校验、映射逻辑,仅将核心写TFRecord逻辑替换为读取解析逻辑,保证转换结果和原始生成逻辑完全对齐,可直接用于验证TFRecord内的加工数据。

完整修改后代码

import numpy as np
import os
import tensorflow as tf
import tqdm
import pdb
import glob
import time
import sys
import re
import argparse
import fastBPE
import platform

use_py3 = platform.python_version()[0] == '3'

parser = argparse.ArgumentParser(description='TensorFlow code for reading TFRecords and output readable text')
parser.add_argument('--tfrecord_file', type=str, required=True,
                                        help='待读取的TFRecords文件路径')
parser.add_argument('--control_code', type=str, required=True,
                                        help='生成TFRecords时使用的控制符,必须存在于词表中')
parser.add_argument('--sequence_len', type=int, required=True,
                                        help='生成TFRecords时使用的序列长度(256或512)')
parser.add_argument('--output_text', type=str, required=True,
                                        help='输出可读文本的保存路径')

args = parser.parse_args()

# 加载词表逻辑和原代码完全一致
vocab = open('../vocab').read().decode(encoding='utf-8').split('\n') if not use_py3 else open('../vocab', encoding='utf-8').read().split('\n')
vocab = list(map(lambda x: x.split(' ')[0], vocab)) + ['<unk>'] + ['\n']
print ('{} 个唯一词'.format(len(vocab)))

if args.control_code not in vocab:
    print('提供的控制符不在词表中')
    print('请更换为词表中存在的控制符')
    sys.exit(1)
    
# 索引和词的映射逻辑和原代码完全一致
word2idx = {u:i for i, u in enumerate(vocab)}
idx2word = np.array(vocab)

# TFRecord解析函数,和原代码写入的feature结构完全对齐
def parse_tfrecord_fn(example):
    feature_description = {
        'input': tf.io.FixedLenFeature([args.sequence_len], tf.int64),
        'output': tf.io.FixedLenFeature([args.sequence_len], tf.int64),
    }
    return tf.io.parse_single_example(example, feature_description)

# 加载并解析TFRecord数据集
raw_dataset = tf.data.TFRecordDataset(args.tfrecord_file)
parsed_dataset = raw_dataset.map(parse_tfrecord_fn)

all_tokens = []
for parsed_record in tqdm.tqdm(parsed_dataset):
    # 读取output序列覆盖所有文本内容
    output_ids = parsed_record['output'].numpy()
    output_tokens = idx2word[output_ids]
    all_tokens.extend(output_tokens.tolist())

# 处理BPE标记生成可读文本
full_text = ' '.join(all_tokens)
# 移除BPE连接符
full_text = full_text.replace('@@ ', '')
# 还原换行符
full_text = full_text.replace(' \n ', '\n').replace(' \n', '\n')

# 写入输出文件
with open(args.output_text, 'w', encoding='utf-8') as f:
    f.write(full_text)

print(f'转换完成,可读文本已保存至:{args.output_text}')

使用说明

  • 运行命令示例:python tfrecord_to_text.py --tfrecord_file 你的输入文件.tfrecords --control_code 生成时用的控制符 --sequence_len 256 --output_text 输出结果.txt
  • 注意事项:
    • 词表../vocab路径需和生成TFRecord时的路径保持一致
    • sequence_len参数必须和生成TFRecord时使用的参数完全一致,否则会解析错误
    • 输出文本自动处理了BPE编码标记,直接得到和原始txt接近的可读格式

内容的提问来源于stack exchange,提问作者Abdul Ahad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:45:01