
1) 【一句话结论】
处理非结构化文本时,通过NLP技术(分词、实体识别)提取结构化关键信息,结合数据清洗(缺失值、异常值处理)提升数据质量,为预测模型提供高质量特征。
2) 【原理/概念讲解】
精算中处理非结构化文本(如保险合同、理赔报告)需分步骤:
3) 【对比与适用场景】
| 方法/模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 分词方法 | 文本拆解工具 | 速度、上下文敏感度 | Jieba分词:日常文本(速度快);BERT分词:复杂句式(上下文敏感) | Jieba:复杂句式分词错误;BERT:训练成本高 |
| 实体识别模型 | 识别关键信息模型 | 实时性、准确率 | 规则引擎:简单实体(如金额、日期);深度学习(BiLSTM-CRF):复杂实体(如索赔类型) | 规则引擎:语义歧义处理差;深度学习:需标注数据,训练成本高 |
4) 【示例】
伪代码示例(处理保险合同文本提取关键信息):
def process_insurance_contract(text):
# 1. 文本预处理:分词
tokens = jieba.cut(text) # 中文分词
# 2. 实体识别:命名实体识别(NER)
ner_model = load_ner_model() # BERT-based NER模型
entities = ner_model.predict(tokens) # 识别实体列表
# 3. 提取关键信息
policy_amount = extract_amount(entities) # 正则匹配金额(如"100万" -> 1000000)
claim_type = extract_claim_type(entities) # 从实体中提取(如"意外伤害")
# 4. 数据清洗:处理缺失值
if policy_amount is None:
policy_amount = np.nan # 用NaN表示缺失
# 处理异常值:金额过大(假设合理上限为100万)
if policy_amount > 1e6:
policy_amount = np.nan # 标记为异常
# 处理时间节点:提取索赔日期
claim_date = extract_date(entities) # 正则匹配日期(如"2023-05-10")
return {
"policy_amount": policy_amount,
"claim_type": claim_type,
"claim_date": claim_date
}
5) 【面试口播版答案】
处理非结构化文本时,我会设计一个分步流程:首先通过分词和实体识别技术提取关键信息,比如保单金额用正则表达式匹配,索赔类型用BERT-based的NER模型识别;然后进行数据清洗,处理缺失值(比如用均值或中位数填充),异常值(比如金额超过合理范围则标记为异常);最后将清洗后的结构化特征输入预测模型。具体来说,分词用jieba分词,实体识别用预训练的NER模型,清洗时对缺失值用均值填充,异常值用边界值法处理,确保数据质量。
6) 【追问清单】
7) 【常见坑/雷区】