Spaces:
Running
Running
你需要从本地路径读取json数据,例如resume.json,而不是直接展示resume_dict,resume_dict只是一个示例。
Browse files- README.md +8 -5
- components/resume-footer.js +43 -0
- components/resume-header.js +76 -0
- components/resume-section.js +49 -0
- index.html +150 -19
- resume.json +86 -0
- script.js +131 -0
- style.css +27 -18
README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title: Resume Wizard
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Resume Wizard 🧙
|
| 3 |
+
colorFrom: red
|
| 4 |
+
colorTo: purple
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
components/resume-footer.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class ResumeFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
footer {
|
| 7 |
+
margin-top: 3rem;
|
| 8 |
+
padding-top: 2rem;
|
| 9 |
+
border-top: 1px solid #e5e7eb;
|
| 10 |
+
text-align: center;
|
| 11 |
+
color: #6b7280;
|
| 12 |
+
font-size: 0.875rem;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.print-button {
|
| 16 |
+
background-color: #4f46e5;
|
| 17 |
+
color: white;
|
| 18 |
+
padding: 0.5rem 1rem;
|
| 19 |
+
border-radius: 0.375rem;
|
| 20 |
+
display: inline-flex;
|
| 21 |
+
align-items: center;
|
| 22 |
+
gap: 0.5rem;
|
| 23 |
+
cursor: pointer;
|
| 24 |
+
margin-bottom: 1rem;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.print-button:hover {
|
| 28 |
+
background-color: #4338ca;
|
| 29 |
+
}
|
| 30 |
+
</style>
|
| 31 |
+
|
| 32 |
+
<footer>
|
| 33 |
+
<button class="print-button no-print" onclick="window.print()">
|
| 34 |
+
<i data-feather="printer"></i>
|
| 35 |
+
Print Resume
|
| 36 |
+
</button>
|
| 37 |
+
<p>Last updated: ${new Date().toLocaleDateString()}</p>
|
| 38 |
+
</footer>
|
| 39 |
+
`;
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
customElements.define('resume-footer', ResumeFooter);
|
components/resume-header.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class ResumeHeader extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
.header {
|
| 7 |
+
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
|
| 8 |
+
color: white;
|
| 9 |
+
border-radius: 0.75rem;
|
| 10 |
+
padding: 2rem;
|
| 11 |
+
position: relative;
|
| 12 |
+
overflow: hidden;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.header::before {
|
| 16 |
+
content: "";
|
| 17 |
+
position: absolute;
|
| 18 |
+
top: -50%;
|
| 19 |
+
right: -50%;
|
| 20 |
+
width: 100%;
|
| 21 |
+
height: 200%;
|
| 22 |
+
background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
|
| 23 |
+
transform: rotate(30deg);
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
.contact-info {
|
| 27 |
+
display: flex;
|
| 28 |
+
flex-wrap: wrap;
|
| 29 |
+
gap: 1rem;
|
| 30 |
+
margin-top: 1rem;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
.contact-item {
|
| 34 |
+
display: flex;
|
| 35 |
+
align-items: center;
|
| 36 |
+
gap: 0.5rem;
|
| 37 |
+
font-size: 0.9rem;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
@media (max-width: 640px) {
|
| 41 |
+
.header {
|
| 42 |
+
padding: 1.5rem;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
.name {
|
| 46 |
+
font-size: 1.5rem;
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
</style>
|
| 50 |
+
|
| 51 |
+
<header class="header shadow-lg">
|
| 52 |
+
<div class="relative z-10">
|
| 53 |
+
<h1 class="name text-3xl font-bold">何攀</h1>
|
| 54 |
+
<p class="title text-xl opacity-90 mt-1">NLP Researcher</p>
|
| 55 |
+
|
| 56 |
+
<div class="contact-info">
|
| 57 |
+
<div class="contact-item">
|
| 58 |
+
<i data-feather="mail"></i>
|
| 59 |
+
<span>newtonysls@gmail.com</span>
|
| 60 |
+
</div>
|
| 61 |
+
<div class="contact-item">
|
| 62 |
+
<i data-feather="phone"></i>
|
| 63 |
+
<span>156-8312-1839</span>
|
| 64 |
+
</div>
|
| 65 |
+
<div class="contact-item">
|
| 66 |
+
<i data-feather="map-pin"></i>
|
| 67 |
+
<span>四川省成都市电子科技大学清水河校区</span>
|
| 68 |
+
</div>
|
| 69 |
+
</div>
|
| 70 |
+
</div>
|
| 71 |
+
</header>
|
| 72 |
+
`;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
customElements.define('resume-header', ResumeHeader);
|
components/resume-section.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class ResumeSection extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
const title = this.getAttribute('title') || '';
|
| 4 |
+
const icon = this.getAttribute('icon') || 'file';
|
| 5 |
+
|
| 6 |
+
this.attachShadow({ mode: 'open' });
|
| 7 |
+
this.shadowRoot.innerHTML = `
|
| 8 |
+
<style>
|
| 9 |
+
.section-title {
|
| 10 |
+
display: flex;
|
| 11 |
+
align-items: center;
|
| 12 |
+
gap: 0.75rem;
|
| 13 |
+
margin-bottom: 1.5rem;
|
| 14 |
+
color: #4f46e5;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
.section-title h2 {
|
| 18 |
+
font-size: 1.25rem;
|
| 19 |
+
font-weight: 600;
|
| 20 |
+
margin: 0;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
.section-icon {
|
| 24 |
+
width: 2rem;
|
| 25 |
+
height: 2rem;
|
| 26 |
+
display: flex;
|
| 27 |
+
align-items: center;
|
| 28 |
+
justify-content: center;
|
| 29 |
+
background-color: #eef2ff;
|
| 30 |
+
border-radius: 50%;
|
| 31 |
+
}
|
| 32 |
+
</style>
|
| 33 |
+
|
| 34 |
+
<section class="resume-section">
|
| 35 |
+
<div class="section-title">
|
| 36 |
+
<div class="section-icon">
|
| 37 |
+
<i data-feather="${icon}"></i>
|
| 38 |
+
</div>
|
| 39 |
+
<h2>${title}</h2>
|
| 40 |
+
</div>
|
| 41 |
+
<div class="section-content">
|
| 42 |
+
<slot></slot>
|
| 43 |
+
</div>
|
| 44 |
+
</section>
|
| 45 |
+
`;
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
customElements.define('resume-section', ResumeSection);
|
index.html
CHANGED
|
@@ -1,19 +1,150 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Resume - He Pan</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
+
<script src="components/resume-header.js"></script>
|
| 12 |
+
<script src="components/resume-section.js"></script>
|
| 13 |
+
<script src="components/resume-footer.js"></script>
|
| 14 |
+
</head>
|
| 15 |
+
<body class="bg-gray-50 text-gray-800 font-sans">
|
| 16 |
+
<div class="max-w-4xl mx-auto p-6 md:p-8">
|
| 17 |
+
<resume-header></resume-header>
|
| 18 |
+
|
| 19 |
+
<main class="mt-8 space-y-8" id="resume-content">
|
| 20 |
+
<!-- Resume content will be dynamically loaded here -->
|
| 21 |
+
</main>
|
| 22 |
+
|
| 23 |
+
<resume-footer></resume-footer>
|
| 24 |
+
</div>
|
| 25 |
+
|
| 26 |
+
<script>
|
| 27 |
+
feather.replace();
|
| 28 |
+
|
| 29 |
+
// Load resume data from JSON file
|
| 30 |
+
fetch('resume.json')
|
| 31 |
+
.then(response => response.json())
|
| 32 |
+
.then(data => {
|
| 33 |
+
const resumeContent = document.getElementById('resume-content');
|
| 34 |
+
generateResumeContent(data, resumeContent);
|
| 35 |
+
feather.replace(); // Refresh icons after content is loaded
|
| 36 |
+
})
|
| 37 |
+
.catch(error => {
|
| 38 |
+
console.error('Error loading resume data:', error);
|
| 39 |
+
});
|
| 40 |
+
</script>
|
| 41 |
+
<div class="space-y-6">
|
| 42 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 43 |
+
<div class="flex justify-between items-start">
|
| 44 |
+
<div>
|
| 45 |
+
<h3 class="text-lg font-semibold">电子科技大学</h3>
|
| 46 |
+
<p class="text-gray-600">计算机科学与技术 - 硕士</p>
|
| 47 |
+
</div>
|
| 48 |
+
<span class="text-gray-500">2020-09 - 至今</span>
|
| 49 |
+
</div>
|
| 50 |
+
<div class="mt-2">
|
| 51 |
+
<p class="text-gray-700"><span class="font-medium">GPA:</span> 4.4(示例)</p>
|
| 52 |
+
<p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> 自然语言处理, 深度学习, 机器学习, 计算机操作系统, 计算机网络</p>
|
| 53 |
+
</div>
|
| 54 |
+
</div>
|
| 55 |
+
|
| 56 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 57 |
+
<div class="flex justify-between items-start">
|
| 58 |
+
<div>
|
| 59 |
+
<h3 class="text-lg font-semibold">吉林大学</h3>
|
| 60 |
+
<p class="text-gray-600">地球物理 - 学士</p>
|
| 61 |
+
</div>
|
| 62 |
+
<span class="text-gray-500">2016-09 - 2020-06</span>
|
| 63 |
+
</div>
|
| 64 |
+
<div class="mt-2">
|
| 65 |
+
<p class="text-gray-700"><span class="font-medium">GPA:</span> 4.4/5.0</p>
|
| 66 |
+
<p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> 计算机操作系统, 计算机网络, 自然语言处理基础, 机器学习导论, 深度学习框架实践</p>
|
| 67 |
+
</div>
|
| 68 |
+
</div>
|
| 69 |
+
</div>
|
| 70 |
+
</resume-section>
|
| 71 |
+
|
| 72 |
+
<resume-section title="Work Experience" icon="briefcase">
|
| 73 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 74 |
+
<div class="flex justify-between items-start">
|
| 75 |
+
<div>
|
| 76 |
+
<h3 class="text-lg font-semibold">网易伏羲</h3>
|
| 77 |
+
<p class="text-gray-600">NLP研究员</p>
|
| 78 |
+
</div>
|
| 79 |
+
<span class="text-gray-500">2022-03 - 2022-06</span>
|
| 80 |
+
</div>
|
| 81 |
+
<ul class="mt-4 space-y-3 list-disc list-inside text-gray-700">
|
| 82 |
+
<li>构建基于预训练模型的无监督段落级文本摘要系统,针对游戏剧情生成场景设计创新性数据增强方案。通过动态段落删减策略结合连续性判断机制构建正负样本,实现无需人工标注的段落级缩写模型,有效解决小样本场景下的训练数据稀缺问题,成果可迁移应用���NLU领域的文本精简与信息压缩任务。</li>
|
| 83 |
+
<li>主导开发Lizards-GEAT:参数高效且泛化增强的Prompt Tuning框架。创新性提出无梯度反向传播的直接分类架构,显著提升训练效率;设计答案词干扰增强策略,通过错误词注入提升模型泛化能力。该方法在保持模型性能的同时降低90%计算开销,相关成果已形成论文投递ACL 2024,独立完成实验设计、模型实现及论文撰写工作,充分展现大模型微调与算法优化能力。</li>
|
| 84 |
+
</ul>
|
| 85 |
+
</div>
|
| 86 |
+
</resume-section>
|
| 87 |
+
|
| 88 |
+
<resume-section title="Research Publications" icon="file-text">
|
| 89 |
+
<div class="space-y-6">
|
| 90 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 91 |
+
<h3 class="text-lg font-semibold">Sentence Rewriting for Fine-Tuned Model Based on Dictionary: Taking the Track 1 of NLPCC 2021 Argumentative Text Understanding for AI Debater as an Example</h3>
|
| 92 |
+
<p class="text-gray-600 mt-1">He P, Wang Y, Zhang Y | CCF International Conference on Natural Language Processing and Chinese Computing | 2021</p>
|
| 93 |
+
<p class="text-gray-700 mt-2">Proposed a novel sentence rewriting framework for fine-tuned models based on dictionary matching mechanisms. The approach effectively enhanced argumentative text understanding capabilities for AI debater systems, achieving state-of-the-art results on NLPCC 2021 Track 1 benchmark.</p>
|
| 94 |
+
</div>
|
| 95 |
+
|
| 96 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 97 |
+
<h3 class="text-lg font-semibold">Zhegu@SMM4H-2022: The Pre-training Tweet & Claim Matching Makes Your Prediction Better</h3>
|
| 98 |
+
<p class="text-gray-600 mt-1">Pan He, Yuze Chen, Yanru Zhang | Proceedings of the Seventh Social Media Mining for Health Applications (SMM4H) Workshop & Shared Task | 2022</p>
|
| 99 |
+
<p class="text-gray-700 mt-2">Proposed a pre-training framework for tweet and claim matching in health domain, achieving state-of-the-art accuracy on social media text classification. The method effectively enhances contextual understanding through domain-specific pre-training.</p>
|
| 100 |
+
</div>
|
| 101 |
+
</div>
|
| 102 |
+
</resume-section>
|
| 103 |
+
|
| 104 |
+
<resume-section title="Skills" icon="code">
|
| 105 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 106 |
+
<ul class="space-y-3 list-disc list-inside text-gray-700">
|
| 107 |
+
<li>精通Python编程及PyTorch深度学习框架,具备NLP算法开发经验。熟悉Transformer/BERT等预训练模型的微调实践,掌握RAG系统构建流程(文档切分、向量检索、知识融合),了解LangChain等Agent框架原理。具备模型工程化部署能力,熟悉意图识别、实体抽取等NLU核心任务的优化方法</li>
|
| 108 |
+
<li>精通自然语言处理核心技术,包括文本分类、意图识别、实体抽取及情感分析等NLU任务。具备大语言模型(如Llama、GLM)的预训练、微调及Prompt Tuning实践经验,能针对业务场景优化模型效果。熟悉向量数据库和语义检索技术,具备RAG系统全链路开发能力。</li>
|
| 109 |
+
<li>CET-6,具备专业级英文听说读写能力,能够高效阅读NLP领域顶会论文(如ACL/EMNLP)并撰写英文学术论文。擅长解析NLU算法论文(意图识别/实体抽取),可快速复现SOTA模型。熟悉Agent领域核心论文(ReAct/Tool-use),具备基于LangChain/LlamaIndex框架的工程实现能力</li>
|
| 110 |
+
</ul>
|
| 111 |
+
</div>
|
| 112 |
+
</resume-section>
|
| 113 |
+
|
| 114 |
+
<resume-section title="Patents" icon="award">
|
| 115 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 116 |
+
<h3 class="text-lg font-semibold">基于预训练模型语义理解的多语言缩写消歧义算法</h3>
|
| 117 |
+
<p class="text-gray-600 mt-1">Owner: 何攀</p>
|
| 118 |
+
</div>
|
| 119 |
+
</resume-section>
|
| 120 |
+
|
| 121 |
+
<resume-section title="Awards" icon="star">
|
| 122 |
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
| 123 |
+
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
|
| 124 |
+
<h4 class="font-medium">国家励志奖学金</h4>
|
| 125 |
+
<p class="text-gray-600 text-sm mt-1">2017-09</p>
|
| 126 |
+
</div>
|
| 127 |
+
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
|
| 128 |
+
<h4 class="font-medium">校一等奖学金</h4>
|
| 129 |
+
<p class="text-gray-600 text-sm mt-1">2022-09</p>
|
| 130 |
+
</div>
|
| 131 |
+
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
|
| 132 |
+
<h4 class="font-medium">校二等奖学金</h4>
|
| 133 |
+
<p class="text-gray-600 text-sm mt-1">2021-09</p>
|
| 134 |
+
</div>
|
| 135 |
+
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
|
| 136 |
+
<h4 class="font-medium">校三等奖学金</h4>
|
| 137 |
+
<p class="text-gray-600 text-sm mt-1">2017-09, 2020-09</p>
|
| 138 |
+
</div>
|
| 139 |
+
</div>
|
| 140 |
+
</resume-section>
|
| 141 |
+
|
| 142 |
+
<resume-section title="Self Assessment" icon="user">
|
| 143 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 144 |
+
<p class="text-gray-700">具备扎实的自然语言处理理论基础,擅长意图识别、实体抽取等NLU核心技术研发。熟悉Transformer架构及大语言模型微调技术,有基于LangChain框架的智能体开发经验。擅长将前沿研究成果(如ReAct框架)转化为实际业务方案,在多轮对话管理和RAG系统优化方面有成功落地案例。具备优秀的跨团队协作能力,能够通过技术分享促进团队知识沉淀,曾主导构建NLP模型评测体系并推动数据闭环建设。</p>
|
| 145 |
+
</div>
|
| 146 |
+
</resume-section>
|
| 147 |
+
</main>
|
| 148 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 149 |
+
</body>
|
| 150 |
+
</html>
|
resume.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
```json
|
| 2 |
+
{
|
| 3 |
+
"name": "何攀",
|
| 4 |
+
"title": "NLP Researcher",
|
| 5 |
+
"contact": {
|
| 6 |
+
"email": "newtonysls@gmail.com",
|
| 7 |
+
"phone": "156-8312-1839",
|
| 8 |
+
"address": "四川省成都市电子科技大学清水河校区"
|
| 9 |
+
},
|
| 10 |
+
"education": [
|
| 11 |
+
{
|
| 12 |
+
"institution": "电子科技大学",
|
| 13 |
+
"degree": "硕士",
|
| 14 |
+
"major": "计算机科学与技术",
|
| 15 |
+
"startDate": "2020-09",
|
| 16 |
+
"endDate": "至今",
|
| 17 |
+
"gpa": "4.4(示例)",
|
| 18 |
+
"courses": ["自然语言处理", "深度学习", "机器学习", "计算机操作系统", "计算机网络"]
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"institution": "吉林大学",
|
| 22 |
+
"degree": "学士",
|
| 23 |
+
"major": "地球物理",
|
| 24 |
+
"startDate": "2016-09",
|
| 25 |
+
"endDate": "2020-06",
|
| 26 |
+
"gpa": "4.4/5.0",
|
| 27 |
+
"courses": ["计算机操作系统", "计算机网络", "自然语言处理基础", "机器学习导论", "深度学习框架实践"]
|
| 28 |
+
}
|
| 29 |
+
],
|
| 30 |
+
"workExperience": [
|
| 31 |
+
{
|
| 32 |
+
"company": "网易伏羲",
|
| 33 |
+
"position": "NLP研究员",
|
| 34 |
+
"startDate": "2022-03",
|
| 35 |
+
"endDate": "2022-06",
|
| 36 |
+
"responsibilities": [
|
| 37 |
+
"构建基于预训练模型的无监督段落级文本摘要系统,针对游戏剧情生成场景设计创新性数据增强方案。通过动态段落删减策略结合连续性判断机制构建正负样本,实现无需人工标注的段落级缩写模型,有效解决小样本场景下的训练数据稀缺问题,成果可迁移应用于NLU领域的文本精简与信息压缩任务。",
|
| 38 |
+
"主导开发Lizards-GEAT:参数高效且泛化增强的Prompt Tuning框架。创新性提出无梯度反向传播的直接分类架构,显著提升训练效率;设计答案词干扰增强策略,通过错误词注入提升模型泛化能力。该方法在保持模型性能的同时降低90%计算开销,相关成果已形成论文投递ACL 2024,独立完成实验设计、模型实现及论文撰写工作,充分展现大模型微调与算法优化能力。"
|
| 39 |
+
]
|
| 40 |
+
}
|
| 41 |
+
],
|
| 42 |
+
"publications": [
|
| 43 |
+
{
|
| 44 |
+
"title": "Sentence Rewriting for Fine-Tuned Model Based on Dictionary: Taking the Track 1 of NLPCC 2021 Argumentative Text Understanding for AI Debater as an Example",
|
| 45 |
+
"authors": "He P, Wang Y, Zhang Y",
|
| 46 |
+
"conference": "CCF International Conference on Natural Language Processing and Chinese Computing",
|
| 47 |
+
"year": "2021",
|
| 48 |
+
"description": "Proposed a novel sentence rewriting framework for fine-tuned models based on dictionary matching mechanisms. The approach effectively enhanced argumentative text understanding capabilities for AI debater systems, achieving state-of-the-art results on NLPCC 2021 Track 1 benchmark."
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"title": "Zhegu@SMM4H-2022: The Pre-training Tweet & Claim Matching Makes Your Prediction Better",
|
| 52 |
+
"authors": "Pan He, Yuze Chen, Yanru Zhang",
|
| 53 |
+
"conference": "Proceedings of the Seventh Social Media Mining for Health Applications (SMM4H) Workshop & Shared Task",
|
| 54 |
+
"year": "2022",
|
| 55 |
+
"description": "Proposed a pre-training framework for tweet and claim matching in health domain, achieving state-of-the-art accuracy on social media text classification. The method effectively enhances contextual understanding through domain-specific pre-training."
|
| 56 |
+
}
|
| 57 |
+
],
|
| 58 |
+
"skills": [
|
| 59 |
+
"精通Python编程及PyTorch深度学习框架,具备NLP算法开发经验。熟悉Transformer/BERT等预训练模型的微调实践,掌握RAG系统构建流程(文档切分、向量检索、知识融合),了解LangChain等Agent框架原理。具备模型工程化部署能力,熟悉意图识别、实体抽取等NLU核心任务的优化方法",
|
| 60 |
+
"精通自然语言处理核心技术,包括文本分类、意图识别、实体抽取及情感分析等NLU任务。具备大语言模型(如Llama、GLM)的预训练、微调及Prompt Tuning实践经验,能针对业务场景优化模型效果。熟悉向量数据库和语义检索技术,具备RAG系统全链路开发能力。",
|
| 61 |
+
"CET-6,具备专业级英文听说读写能力,能够高效阅读NLP领域顶会论文(如ACL/EMNLP)并撰写英文学术论文。擅长解析NLU算法论文(意图识别/实体抽取),可快速复现SOTA模型。熟悉Agent领域核心论文(ReAct/Tool-use),具备基于LangChain/LlamaIndex框架的工程实现能力"
|
| 62 |
+
],
|
| 63 |
+
"awards": [
|
| 64 |
+
{
|
| 65 |
+
"name": "国家励志奖学金",
|
| 66 |
+
"date": "2017-09"
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"name": "校一等奖学金",
|
| 70 |
+
"date": "2022-09"
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "校二等奖学金",
|
| 74 |
+
"date": "2021-09"
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"name": "校三等奖学金",
|
| 78 |
+
"date": "2017-09, 2020-09"
|
| 79 |
+
}
|
| 80 |
+
],
|
| 81 |
+
"selfAssessment": "具备扎实的自然语言处理理论基础,擅长意图识别、实体抽取等NLU核心技术研发。熟悉Transformer架构及大语言模型微调技术,有基于LangChain框架的智能体开发经验。擅长将前沿研究成果(如ReAct框架)转化为实际业务方案,在多轮对话管理和RAG系统优化方面有成功落地案例。具备优秀的跨团队协作能力,能够通过技术分享促进团队知识沉淀,曾主导构建NLP模型评测体系并推动数据闭环建设。"
|
| 82 |
+
}
|
| 83 |
+
```
|
| 84 |
+
___METADATA_START___
|
| 85 |
+
{"isNew":true,"userName":"hepansls"}
|
| 86 |
+
___METADATA_END___
|
script.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
function generateResumeContent(data, container) {
|
| 2 |
+
// Generate Education section
|
| 3 |
+
if (data.education && data.education.length > 0) {
|
| 4 |
+
const educationSection = document.createElement('resume-section');
|
| 5 |
+
educationSection.setAttribute('title', 'Education');
|
| 6 |
+
educationSection.setAttribute('icon', 'book');
|
| 7 |
+
|
| 8 |
+
let educationHTML = '<div class="space-y-6">';
|
| 9 |
+
data.education.forEach(edu => {
|
| 10 |
+
educationHTML += `
|
| 11 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 12 |
+
<div class="flex justify-between items-start">
|
| 13 |
+
<div>
|
| 14 |
+
<h3 class="text-lg font-semibold">${edu.institution}</h3>
|
| 15 |
+
<p class="text-gray-600">${edu.degree} - ${edu.major}</p>
|
| 16 |
+
</div>
|
| 17 |
+
<span class="text-gray-500">${edu.startDate} - ${edu.endDate}</span>
|
| 18 |
+
</div>
|
| 19 |
+
<div class="mt-2">
|
| 20 |
+
<p class="text-gray-700"><span class="font-medium">GPA:</span> ${edu.gpa}</p>
|
| 21 |
+
<p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> ${edu.courses.join(', ')}</p>
|
| 22 |
+
</div>
|
| 23 |
+
</div>
|
| 24 |
+
`;
|
| 25 |
+
});
|
| 26 |
+
educationHTML += '</div>';
|
| 27 |
+
educationSection.innerHTML = educationHTML;
|
| 28 |
+
container.appendChild(educationSection);
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
// Generate Work Experience section
|
| 32 |
+
if (data.workExperience && data.workExperience.length > 0) {
|
| 33 |
+
const workSection = document.createElement('resume-section');
|
| 34 |
+
workSection.setAttribute('title', 'Work Experience');
|
| 35 |
+
workSection.setAttribute('icon', 'briefcase');
|
| 36 |
+
|
| 37 |
+
let workHTML = '<div class="space-y-6">';
|
| 38 |
+
data.workExperience.forEach(work => {
|
| 39 |
+
workHTML += `
|
| 40 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 41 |
+
<div class="flex justify-between items-start">
|
| 42 |
+
<div>
|
| 43 |
+
<h3 class="text-lg font-semibold">${work.company}</h3>
|
| 44 |
+
<p class="text-gray-600">${work.position}</p>
|
| 45 |
+
</div>
|
| 46 |
+
<span class="text-gray-500">${work.startDate} - ${work.endDate}</span>
|
| 47 |
+
</div>
|
| 48 |
+
<ul class="mt-4 space-y-3 list-disc list-inside text-gray-700">
|
| 49 |
+
${work.responsibilities.map(resp => `<li>${resp}</li>`).join('')}
|
| 50 |
+
</ul>
|
| 51 |
+
</div>
|
| 52 |
+
`;
|
| 53 |
+
});
|
| 54 |
+
workHTML += '</div>';
|
| 55 |
+
workSection.innerHTML = workHTML;
|
| 56 |
+
container.appendChild(workSection);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
// Generate Publications section
|
| 60 |
+
if (data.publications && data.publications.length > 0) {
|
| 61 |
+
const pubSection = document.createElement('resume-section');
|
| 62 |
+
pubSection.setAttribute('title', 'Research Publications');
|
| 63 |
+
pubSection.setAttribute('icon', 'file-text');
|
| 64 |
+
|
| 65 |
+
let pubHTML = '<div class="space-y-6">';
|
| 66 |
+
data.publications.forEach(pub => {
|
| 67 |
+
pubHTML += `
|
| 68 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 69 |
+
<h3 class="text-lg font-semibold">${pub.title}</h3>
|
| 70 |
+
<p class="text-gray-600 mt-1">${pub.authors} | ${pub.conference} | ${pub.year}</p>
|
| 71 |
+
<p class="text-gray-700 mt-2">${pub.description}</p>
|
| 72 |
+
</div>
|
| 73 |
+
`;
|
| 74 |
+
});
|
| 75 |
+
pubHTML += '</div>';
|
| 76 |
+
pubSection.innerHTML = pubHTML;
|
| 77 |
+
container.appendChild(pubSection);
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
// Generate Skills section
|
| 81 |
+
if (data.skills && data.skills.length > 0) {
|
| 82 |
+
const skillsSection = document.createElement('resume-section');
|
| 83 |
+
skillsSection.setAttribute('title', 'Skills');
|
| 84 |
+
skillsSection.setAttribute('icon', 'code');
|
| 85 |
+
|
| 86 |
+
const skillsHTML = `
|
| 87 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 88 |
+
<ul class="space-y-3 list-disc list-inside text-gray-700">
|
| 89 |
+
${data.skills.map(skill => `<li>${skill}</li>`).join('')}
|
| 90 |
+
</ul>
|
| 91 |
+
</div>
|
| 92 |
+
`;
|
| 93 |
+
skillsSection.innerHTML = skillsHTML;
|
| 94 |
+
container.appendChild(skillsSection);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
// Generate Awards section
|
| 98 |
+
if (data.awards && data.awards.length > 0) {
|
| 99 |
+
const awardsSection = document.createElement('resume-section');
|
| 100 |
+
awardsSection.setAttribute('title', 'Awards');
|
| 101 |
+
awardsSection.setAttribute('icon', 'award');
|
| 102 |
+
|
| 103 |
+
let awardsHTML = '<div class="grid grid-cols-1 md:grid-cols-2 gap-4">';
|
| 104 |
+
data.awards.forEach(award => {
|
| 105 |
+
awardsHTML += `
|
| 106 |
+
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
|
| 107 |
+
<h4 class="font-medium">${award.name}</h4>
|
| 108 |
+
<p class="text-gray-600 text-sm mt-1">${award.date}</p>
|
| 109 |
+
</div>
|
| 110 |
+
`;
|
| 111 |
+
});
|
| 112 |
+
awardsHTML += '</div>';
|
| 113 |
+
awardsSection.innerHTML = awardsHTML;
|
| 114 |
+
container.appendChild(awardsSection);
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
// Generate Self Assessment section
|
| 118 |
+
if (data.selfAssessment) {
|
| 119 |
+
const selfSection = document.createElement('resume-section');
|
| 120 |
+
selfSection.setAttribute('title', 'Self Assessment');
|
| 121 |
+
selfSection.setAttribute('icon', 'user');
|
| 122 |
+
|
| 123 |
+
const selfHTML = `
|
| 124 |
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
|
| 125 |
+
<p class="text-gray-700">${data.selfAssessment}</p>
|
| 126 |
+
</div>
|
| 127 |
+
`;
|
| 128 |
+
selfSection.innerHTML = selfHTML;
|
| 129 |
+
container.appendChild(selfSection);
|
| 130 |
+
}
|
| 131 |
+
}
|
style.css
CHANGED
|
@@ -1,28 +1,37 @@
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
font-size: 15px;
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
.
|
| 19 |
-
|
| 20 |
-
margin: 0 auto;
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
.
|
| 27 |
-
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
|
| 2 |
+
|
| 3 |
body {
|
| 4 |
+
font-family: 'Inter', sans-serif;
|
| 5 |
+
line-height: 1.6;
|
| 6 |
}
|
| 7 |
|
| 8 |
+
.resume-section {
|
| 9 |
+
transition: all 0.3s ease;
|
|
|
|
| 10 |
}
|
| 11 |
|
| 12 |
+
.resume-section:hover {
|
| 13 |
+
transform: translateY(-2px);
|
|
|
|
|
|
|
|
|
|
| 14 |
}
|
| 15 |
|
| 16 |
+
.print-button {
|
| 17 |
+
transition: all 0.2s ease;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
}
|
| 19 |
|
| 20 |
+
.print-button:hover {
|
| 21 |
+
transform: scale(1.05);
|
| 22 |
}
|
| 23 |
+
|
| 24 |
+
@media print {
|
| 25 |
+
body {
|
| 26 |
+
background-color: white;
|
| 27 |
+
color: black;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.no-print {
|
| 31 |
+
display: none !important;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.resume-section {
|
| 35 |
+
break-inside: avoid;
|
| 36 |
+
}
|
| 37 |
+
}
|