593. LLM - Detect AI Generated Text | llm-detect-ai-generated-text
非常感谢主办方举办这次比赛。这是一次非常棒的学习经历。
我要衷心感谢我的团队成员 @drpatrickchan 和 @jerifate,感谢他们宝贵的贡献和协作。同时,我也真诚地感谢整个社区分享他们的见解。
以下是解决方案的简要总结。
def custom_truncate(text, tokenizer_in, max_length=MAX_LEN):
# 将文本分词为句子
sentences = sent_tokenize(text)
tokenized_sentences = [
tokenizer_in.encode(sentence, add_special_tokens=False)
for sentence in sentences
]
# 计算总token数
total_tokens = sum(len(sentence) for sentence in tokenized_sentences)
# 如果总token数已在max_length范围内,返回原文本
if total_tokens <= max_length:
return text
# 确定起始索引的上限
tokens_so_far = 0
for i, sentence_tokens in enumerate(tokenized_sentences):
tokens_so_far += len(sentence_tokens)
if tokens_so_far > max_length:
max_start_index = i
break
# 选择一个不接近末尾的起始点
start_index = random.randint(0, max(max_start_index - 1, 0))
truncated_tokens = []
# 连接句子token直到达到max_length
for sentence_tokens in tokenized_sentences[start_index:]:
if len(truncated_tokens) + len(sentence_tokens) <= max_length:
truncated_tokens.extend(sentence_tokens)
else:
break
# 将token转换回文本
truncated_text = tokenizer_in.decode(
truncated_tokens, skip_special_tokens=True, clean_up_tokenization_spaces=True
)
return truncated_text
def tokenize_with_custom_truncation(examples, max_length=MAX_LEN):
text_li = examples["text"]
# 应用自定义截断
truncated_text_li = []
for text in text_li:
truncated_text = custom_truncate(text, tokenizer, max_length)
truncated_text_li.append(truncated_text)
# 对截断后的文本进行分词
return tokenizer(
truncated_text_li,
padding=True,
truncation=True,
max_length=max_length,
)
更新: 解决方案代码已发布。