Lilju commited on
Commit
5101696
ยท
verified ยท
1 Parent(s): 81d4ce5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -15
app.py CHANGED
@@ -1,5 +1,3 @@
1
- # app.py
2
- # Colab ์ „์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ ์ตœ์†Œ ์ •๋ฆฌํŒ (์›๋ณธ ๋กœ์ง ์œ ์ง€)
3
  import os
4
  import ast
5
  import pandas as pd
@@ -11,8 +9,8 @@ from sentence_transformers import SentenceTransformer, util
11
  import gradio as gr
12
 
13
  DATA_PATH = "data.csv"
 
14
 
15
- # MBTI / ์˜คํ–‰ ์‚ฌ์ „ (์›๋ณธ ๊ทธ๋Œ€๋กœ)
16
  mbti_dict = {
17
  "ENFJ": "ENFJ๋Š” ์‚ฌ๋ ค ๊นŠ๊ณ  ์ด์ƒ์ฃผ์˜์ ์ธ ์„ฑํ–ฅ์œผ๋กœ ๊ธ์ •์ ์ธ ์˜ํ–ฅ๋ ฅ์„ ๋ฐœํœ˜ํ•˜๋ ค ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋•๋Š” ์ผ์— ์ฆ๊ฑฐ์›€๊ณผ ๋งŒ์กฑ๊ฐ์„ ๋А๋‚๋‹ˆ๋‹ค. ์„ธ์‹ฌํ•จ๊ณผ ํ†ต์ฐฐ๋ ฅ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ณต๊ฐ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค. ํ—Œ์‹ ์ ์ธ ์ดํƒ€์ฃผ์˜์ž์ด๋ฉฐ ๋ฆฌ๋”์‹ญ ๊ธฐ์ˆ ์ด ๊ฐ•ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ด์ •์ ์ด๊ณ  ํ—Œ์‹ ์ ์œผ๋กœ ๋‚จ์„ ๋ฐฐ๋ คํ•˜๊ณ  ๋™๋ฃŒ์—๊ฒŒ ์กฐ์–ธ์„ ์ฃผ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.",
18
  "ENFP": "ENFP๋Š” ์ž์œ ๋กœ์šด ์˜ํ˜ผ์œผ๋กœ ์™ธํ–ฅ์ ์ด๊ณ  ์†”์งํ•˜๋ฉฐ ๊ฐœ๋ฐฉ์ ์ธ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ํ™œ๊ธฐ์ฐจ๊ณ  ๋‚™๊ด€์ ์ธ ํƒœ๋„๋กœ ์‚ด์•„๊ฐ€๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ฐ์ •์ ์œผ๋กœ ๊นŠ๊ณ  ์˜๋ฏธ ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ์„ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์ƒ๋ ฅ๊ณผ ์ฐฝ์˜๋ ฅ์ด ํ’๋ถ€ํ•˜๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ์€ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์ž๊ธฐ ์„ฑ์ฐฐ์ ์ธ ๋ชจ์Šต์„ ๋ณด์ผ ๋•Œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ธ์ •์ ์ธ ์—๋„ˆ์ง€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ์ง€๋„์ž์˜ ์—ญํ• ์„ ๋งก์„ ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.",
@@ -40,12 +38,6 @@ woe_dict = {
40
  '์ˆ˜': ("์ˆ˜(ๆฐด) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์ƒํ™ฉ์˜ ํ๋ฆ„๊ณผ ์‚ฌ๋žŒ๋“ค์˜ ๊ฐ์ •์„ ์ž˜ ์ฝ๋Š”๋‹ค. ๊นŠ์ด ์žˆ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ณ  ํƒ๊ตฌํ•˜๋Š” ์„ฑํ–ฅ์ด ์žˆ๋‹ค. ์กฐ์šฉํžˆ ๊ด€์ฐฐํ•˜๊ณ  ๋ถ„์„ํ•˜๊ฑฐ๋‚˜, ์‚ฌ๋žŒ๋“ค์˜ ๋งˆ์Œ์„ ์ดํ•ดํ•˜๋Š” ์—ญํ• ์— ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.")
41
  }
42
 
43
-
44
- if not os.path.exists(DATA_PATH):
45
- raise FileNotFoundError(f"๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค: {DATA_PATH} (Space ๋ฃจํŠธ์— ์—…๋กœ๋“œํ•˜์„ธ์š”)")
46
-
47
- df = pd.read_csv(DATA_PATH)
48
-
49
  def filter_by_major(df, user_major, major_col = "๊ด€๋ จํ•™๊ณผ"):
50
  def to_list(x):
51
  if isinstance(x, str):
@@ -64,11 +56,12 @@ def filter_by_major(df, user_major, major_col = "๊ด€๋ จํ•™๊ณผ"):
64
  print(f"โ€ป ํ•„ํ„ฐ๋ง๋œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
65
  return filtered_df
66
 
 
 
67
  def recommend_jobs(mbti_key,
68
  woe_key,
69
  jobs_df,
70
  top_n = 3,
71
- model_name = "jhgan/ko-sbert-multitask",
72
  job_name_col = "์ง์—…๋ช…",
73
  job_sent_col = "ํฅ๋ฏธ์ ์„ฑ",
74
  job_duty_col = "์ฃผ์š”์—…๋ฌด",
@@ -79,7 +72,7 @@ def recommend_jobs(mbti_key,
79
  mbti_text = mbti_dict.get(mbti_key.upper(), mbti_key)
80
  woe_text = woe_dict.get(woe_key, woe_key)
81
 
82
- model = SentenceTransformer(model_name)
83
 
84
  # mbti, ์˜คํ–‰ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
85
  mbti_emb = model.encode(str(mbti_text), convert_to_tensor = True)
@@ -124,19 +117,20 @@ def recommend_jobs(mbti_key,
124
 
125
  return results
126
 
 
 
 
 
127
  def generate_recommendation_reason(job_name, job_duty, mbti_key, woe_key, similarity_score):
128
  """
129
  OpenAI GPT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์—… ์ถ”์ฒœ ์ด์œ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
130
  """
131
- client = OpenAI(
132
- api_key=os.environ.get("OPENAI_API_KEY")
133
- )
134
 
135
  # ์‚ฌ์šฉ์ž ์„ฑ๊ฒฉ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
136
  mbti_desc = mbti_dict.get(mbti_key.upper(), "")
137
  woe_desc = woe_dict.get(woe_key, "")
138
 
139
- # ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ (์›๋ณธ ๋‚ด์šฉ ์œ ์ง€)
140
  prompt = f"""๋‹น์‹ ์€ ์ง„๋กœ ์ƒ๋‹ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด ์ง์—…์„ ์ถ”์ฒœํ•˜๋Š” ์ด์œ ๋ฅผ 2-3๋ฌธ์žฅ์œผ๋กœ ๊ฐ„๋‹จ๋ช…๋ฃŒํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
141
 
142
  **์‚ฌ์šฉ์ž ์ •๋ณด:**
 
 
 
1
  import os
2
  import ast
3
  import pandas as pd
 
9
  import gradio as gr
10
 
11
  DATA_PATH = "data.csv"
12
+ df = pd.read_csv(DATA_PATH)
13
 
 
14
  mbti_dict = {
15
  "ENFJ": "ENFJ๋Š” ์‚ฌ๋ ค ๊นŠ๊ณ  ์ด์ƒ์ฃผ์˜์ ์ธ ์„ฑํ–ฅ์œผ๋กœ ๊ธ์ •์ ์ธ ์˜ํ–ฅ๋ ฅ์„ ๋ฐœํœ˜ํ•˜๋ ค ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋•๋Š” ์ผ์— ์ฆ๊ฑฐ์›€๊ณผ ๋งŒ์กฑ๊ฐ์„ ๋А๋‚๋‹ˆ๋‹ค. ์„ธ์‹ฌํ•จ๊ณผ ํ†ต์ฐฐ๋ ฅ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ณต๊ฐ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค. ํ—Œ์‹ ์ ์ธ ์ดํƒ€์ฃผ์˜์ž์ด๋ฉฐ ๋ฆฌ๋”์‹ญ ๊ธฐ์ˆ ์ด ๊ฐ•ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ด์ •์ ์ด๊ณ  ํ—Œ์‹ ์ ์œผ๋กœ ๋‚จ์„ ๋ฐฐ๋ คํ•˜๊ณ  ๋™๋ฃŒ์—๊ฒŒ ์กฐ์–ธ์„ ์ฃผ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.",
16
  "ENFP": "ENFP๋Š” ์ž์œ ๋กœ์šด ์˜ํ˜ผ์œผ๋กœ ์™ธํ–ฅ์ ์ด๊ณ  ์†”์งํ•˜๋ฉฐ ๊ฐœ๋ฐฉ์ ์ธ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ํ™œ๊ธฐ์ฐจ๊ณ  ๋‚™๊ด€์ ์ธ ํƒœ๋„๋กœ ์‚ด์•„๊ฐ€๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ฐ์ •์ ์œผ๋กœ ๊นŠ๊ณ  ์˜๋ฏธ ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ์„ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์ƒ๋ ฅ๊ณผ ์ฐฝ์˜๋ ฅ์ด ํ’๋ถ€ํ•˜๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ์€ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์ž๊ธฐ ์„ฑ์ฐฐ์ ์ธ ๋ชจ์Šต์„ ๋ณด์ผ ๋•Œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ธ์ •์ ์ธ ์—๋„ˆ์ง€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ์ง€๋„์ž์˜ ์—ญํ• ์„ ๋งก์„ ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.",
 
38
  '์ˆ˜': ("์ˆ˜(ๆฐด) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์ƒํ™ฉ์˜ ํ๋ฆ„๊ณผ ์‚ฌ๋žŒ๋“ค์˜ ๊ฐ์ •์„ ์ž˜ ์ฝ๋Š”๋‹ค. ๊นŠ์ด ์žˆ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ณ  ํƒ๊ตฌํ•˜๋Š” ์„ฑํ–ฅ์ด ์žˆ๋‹ค. ์กฐ์šฉํžˆ ๊ด€์ฐฐํ•˜๊ณ  ๋ถ„์„ํ•˜๊ฑฐ๋‚˜, ์‚ฌ๋žŒ๋“ค์˜ ๋งˆ์Œ์„ ์ดํ•ดํ•˜๋Š” ์—ญํ• ์— ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.")
39
  }
40
 
 
 
 
 
 
 
41
  def filter_by_major(df, user_major, major_col = "๊ด€๋ จํ•™๊ณผ"):
42
  def to_list(x):
43
  if isinstance(x, str):
 
56
  print(f"โ€ป ํ•„ํ„ฐ๋ง๋œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
57
  return filtered_df
58
 
59
+ MODEL = SentenceTransformer("jhgan/ko-sbert-multitask", device="cpu")
60
+
61
  def recommend_jobs(mbti_key,
62
  woe_key,
63
  jobs_df,
64
  top_n = 3,
 
65
  job_name_col = "์ง์—…๋ช…",
66
  job_sent_col = "ํฅ๋ฏธ์ ์„ฑ",
67
  job_duty_col = "์ฃผ์š”์—…๋ฌด",
 
72
  mbti_text = mbti_dict.get(mbti_key.upper(), mbti_key)
73
  woe_text = woe_dict.get(woe_key, woe_key)
74
 
75
+ model = MODEL
76
 
77
  # mbti, ์˜คํ–‰ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
78
  mbti_emb = model.encode(str(mbti_text), convert_to_tensor = True)
 
117
 
118
  return results
119
 
120
+ client = OpenAI(
121
+ api_key=os.environ.get("OPENAI_API_KEY")
122
+ )
123
+
124
  def generate_recommendation_reason(job_name, job_duty, mbti_key, woe_key, similarity_score):
125
  """
126
  OpenAI GPT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์—… ์ถ”์ฒœ ์ด์œ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
127
  """
 
 
 
128
 
129
  # ์‚ฌ์šฉ์ž ์„ฑ๊ฒฉ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
130
  mbti_desc = mbti_dict.get(mbti_key.upper(), "")
131
  woe_desc = woe_dict.get(woe_key, "")
132
 
133
+ # ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ
134
  prompt = f"""๋‹น์‹ ์€ ์ง„๋กœ ์ƒ๋‹ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด ์ง์—…์„ ์ถ”์ฒœํ•˜๋Š” ์ด์œ ๋ฅผ 2-3๋ฌธ์žฅ์œผ๋กœ ๊ฐ„๋‹จ๋ช…๋ฃŒํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
135
 
136
  **์‚ฌ์šฉ์ž ์ •๋ณด:**