2025年自然语言处理课程自我评价

简介

  • 西南财经大学-23级-人工智能(智能金融实验班)

自我评价

阅读书籍 & 心得

  • 97分

1.《Foundations of Statistical Natural Language Processing》

9-10月

这本书主要讲解了统计自然语言处理的核心框架,把语言任务统一为概率建模与推断问题,围绕语言模型与平滑、序列标注的隐马尔可夫模型HMM、最大熵等判别式模型,以及信息检索与分布式语义等内容,说明如何用数据估计参数并用算法完成建模。

大致看了这本书的一半,对 N-gram 理解更加深刻了,明白为什么需要平滑,如何处理长尾和 OOV,在思考问题中多了 Kneser-Ney 的思维,同时自己做了一点关于 TF-IDF 的实验(有点感兴趣)。同时,这本书首次给我提供了 NLP 的建模思维,理解平滑、正则化等本质上是在用归纳偏置提高泛化能力。这个过程中,我用了其中建模的思维和困惑度的概念,完成了挑战题(用 gpt2 比较哪个 PPL 更低)。

2.《Introduction to Information Retrieval》

9-10月

这本书主要讲信息检索的整体流程与核心方法,从文档表示与倒排索引出发,系统介绍基于词项权重的向量空间模型与 TF-IDF、基于概率的检索模型与 BM25、语言模型检索的基本思想,并进一步覆盖查询处理与优化、文本分类与聚类、评测指标体系以及搜索系统的工程实现要点。

在做分词和了解 TF-IDF 的时候了解到了这本书,大致看了一部分,了解到预处理时规范化、停用词等方法,在 TF-IDF 基础上升级为 BM25,它平衡了长短文章得分差距,减少噪声干扰等。(基于此完成了一个小爬虫项目,爬取了去哪儿网站信息,做快速检索)

3.《Attention Is All You Need》等突破性文章

10-11月

比如 Bert, GPT, Scaling Laws, RLHF 系列, word2vec, Seq2Seq, Glove等等,这里我通过 AI 讲解方式并对照原文完成学习的,在学习 NLP 过程中这些讲解能让我理解课程内容更深刻,比如最初不理解词向量内涵,通过文章以及一些代码理解了 token 是怎么编码训练的词向量,能让语义相近的词,词向量也相近。在这个过程中 Glove 的思想给我留下印象深刻,在后续做一个情感分析 LDL 任务时,设计共现矩阵时我没有采用预处理的方式,而是用\log X_{ij} = \boldsymbol{w}_i \cdot \boldsymbol{w}_j + b_i + b_j这个方式在训练中拟合。这样设计下,结果显著提升。

  • 扣分原因:对于更多新的论文,我有所听闻,但由于时间原因,很多新的文章我还不太了解,更多现代的 SOTA 等还有待探索。

成果及贡献

  • 99分
  1. RNN(LSTM、GRU、BiLSTM、BiGRU)
  2. Transformer(位置编码、多头注意力、LN、双层FFN等调整 R-drop,FGM等添加内容)
  3. 预训练模型(RoBERTa,DeBERTa,DistilBERT,ALBERT,Llama 3,Gemma3,gpt,CLIP)

以上模型都在编程过程中写过,无论是从头开始手写还是直接继承类,或多或少 coding 过,预训练模型(调用API)在不同任务中思考了选择不同预训练模型的优势。(9-12月)

这里展示一个通过 label 来关注文本 token 的注意力上的创新代码(12月):

class LabelAttentionHead(nn.Module):
    def __init__(self, hidden: int, n_heads: int = 8, dropout: float = 0.1):
        super().__init__()
        self.hidden = hidden
        self.n_heads = n_heads
        assert hidden % n_heads == 0
        self.head_dim = hidden // n_heads

        self.q_proj = nn.Linear(hidden, hidden, bias=False)
        self.k_proj = nn.Linear(hidden, hidden, bias=False)
        self.v_proj = nn.Linear(hidden, hidden, bias=False)
        self.out_proj = nn.Linear(hidden, hidden, bias=False)
        self.dropout = nn.Dropout(dropout)

    def forward(self, label_emb: torch.Tensor, token_states: torch.Tensor, attn_mask: torch.Tensor):
        B, L, H = token_states.size()
        C = label_emb.size(0)

        Q = self.q_proj(label_emb).view(C, self.n_heads, self.head_dim)      # [C, nh, hd]
        K = self.k_proj(token_states).view(B, L, self.n_heads, self.head_dim)    # [B, L, nh, hd]
        V = self.v_proj(token_states).view(B, L, self.n_heads, self.head_dim)

        Qb = Q.unsqueeze(0).permute(0, 2, 1, 3)              # [1, nh, C, hd]
        Kt = K.permute(0, 2, 1, 3)                   # [B, nh, L, hd]
        scores = torch.matmul(Qb, Kt.transpose(-2, -1)) / math.sqrt(self.head_dim)  # [B, nh, C, L]

        mask = (attn_mask == 0).unsqueeze(1).unsqueeze(2)         # [B,1,1,L]
        scores = scores.masked_fill(mask, -1e4)

        attn = F.softmax(scores, dim=-1)
        attn = self.dropout(attn)

        Vt = V.permute(0, 2, 1, 3)           # [B, nh, L, hd]
        ctx = torch.matmul(attn, Vt)         # [B, nh, C, hd]
        ctx = ctx.permute(0, 2, 1, 3).contiguous().view(B, C, H)        # [B, C, H]
        ctx = self.out_proj(ctx)
        return ctx

  1. CCKS2025-大模型生成文本检测A榜:318/1094)7月
  2. Hull Tactical - Market Prediction(369/3678)11月
  3. MAP - Charting Student Math Misunderstandings 10月

以上是参加的一些有关比赛,不仅是为了取得好成绩,更多的是能通过比赛学习到别人处理问题的思路和更新的代码。

至于其他任务,平时通过 IMDB、GoEmotions 练习,深度学习上对 LDL 任务研究论文撰写,通过prompt方式构建 LDL 数据集,算法上有时候会有一些小创新,对于 only-encoder 和 only-decoder 任务都有一定研究。

这里用一个流程图描述一下其中一个任务的细节(12月):

  • 得分原因:可能做的任务有点杂,也没有那么理想,但是之前从来没有接触过深度学习,神经网络的我来讲,通过一个学期收获的代码量,我认为足够了。

最终得分

1 + \lfloor \sqrt{97 \times 99} \rfloor  = 99

#2025年终总结#
全部评论

相关推荐

不愿透露姓名的神秘牛友
12-18 11:21
优秀的大熊猫在okr...:叫你朋友入职保安,你再去送外卖,一个从商,一个从政,你们两联手无敌了,睁开你的眼睛看看,现在是谁说了算(校长在背后瑟瑟发抖)
选实习,你更看重哪方面?
点赞 评论 收藏
分享
12-27 16:06
门头沟学院 Java
回头看 2025 年,最大的关键词只有一个:秋招。这一年并不轰轰烈烈,但足够漫长;也谈不上成功,却让我真正理解了“选择”“定位”和“成长”这几个词的重量。一、秋招投递与面试记录从 9 月底到 12 月初,我的秋招几乎贯穿了整个秋天。我总结了自己接收到面试的公司和岗位:9.28|超聚变 —— IT 技术工程师(群面)+ 技术面9.29|传音控股 —— 助理后端开发9.30|中联西北院 —— 软件开发10.9|迪普科技 —— 测试工程师10.16|字节跳动 —— 测试开发工程师10.19|陕西移动 —— 金种子,网络运维管理岗10.23|CVTE —— 应用软件工程师10.27|超聚变 —— 软件开发工程师10.27|卓望 —— Java 开发10.28|中兴通讯 —— 软件开发工程师10.30|优必选 —— 测试开发工程师10.31|去哪儿旅行 —— 测试开发工程师11.1|作业帮 —— 后端研发工程师11.3|HSBC —— Engineering11.11|远江盛邦 —— 研发工程师11.12|ThunderSoft —— Java 工程师(被鸽,不面了)11.19|腾讯云智 —— 测试开发工程师11.25|浦发银行 —— 储备生(客户经理 / 柜员)11.30|联易融数字科技 —— 后端开发培训生(武汉)12.2|广电计量 —— 测试工程师12.2|陕西电信 —— IT 运营、软件开发从互联网大厂、ICT 厂商,到国企、运营商、银行;从后端开发、Java 开发、软件开发,到测试 / 测试开发 / IT 运维,我几乎把自己能碰到的方向都试了一遍。当时的想法其实很简单:先上车,再挑方向。二、这一轮秋招给我的真实感受如果用一句话概括:比想象中残酷,但也比想象中更“公平”。岗位差异,比我想得更重要。同样是“软件/技术岗”,不同公司的侧重点完全不同:有的重算法与系统理解、有的重工程经验与项目落地、有的重稳定性、沟通能力和背景匹配。这让我意识到,“技术好”只是一个很笼统的说法,匹配度才是核心。测试 / 测试开发并不是“退而求其次”,在真正准备测试开发面试、接触像字节、腾讯云智这类团队后,我明显感受到,好的测开,对系统理解要求非常高,自动化、质量体系、工程思维缺一不可。它不是“不会写代码才去做的岗位”,而是工程化能力的一种体现。情绪消耗,远大于技术消耗等消息、被排序、被鸽、HC 不确定……最难的不是刷题,也不是准备八股,而是:明明已经尽力,却依然不知道结果会不会轮到自己......三、反思:这一轮秋招下来,我也清楚地看到了自己的问题:方向摇摆偏多,发力不够聚焦;前期投得比较散,导致准备时精力被拉得很碎。如果重来,我会更早确定 1~2 个主攻方向。项目表达可以更“岗位化”,同一个项目,在后端 / 测开 / 运维岗位面前,讲法其实应该完全不同。心态需要更稳定,秋招不是短跑,而是消耗战。情绪一旦失控,准备效率会断崖式下降。四、最终的理解与收获到了年末,我反而比年中更平静了。我开始接受一件事:秋招的结果,并不等于个人价值的终审判决。这一年,我至少确定了几件很重要的事:——我适合、也愿意长期走工程技术路线——我对系统、质量、架构、稳定性这些“看不见但重要”的东西,有耐心——我比以前更清楚:想成为怎样的工程师,而不是只想进哪家公司但所幸,我最终拿到了自己比较理想的offer,我的秋招完美落幕,并没有像悲剧电影中的那样,有个不完美的结局...结语:2025 年的秋招,没有一锤定音的高光结局,但它让我完成了一次真正成熟的转身。如果说以前是“想上岸”,那现在,我更在意的是——我在往哪游,以及会不会一直游下去。这一年,辛苦了。下一年,继续走。
2025年终总结
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务