Minh Q. Le commited on
Commit
40cd566
·
1 Parent(s): 98eef5e

Added sentiment intensity plot

Browse files
Files changed (5) hide show
  1. app/__init__.py +5 -0
  2. app/cosmic_view.py +38 -2
  3. app/deberta_view.py +39 -3
  4. app/gpt_view.py +38 -3
  5. app/utils.py +73 -3
app/__init__.py CHANGED
@@ -8,6 +8,11 @@ try:
8
  except LookupError:
9
  nltk.download("punkt")
10
 
 
 
 
 
 
11
  PATH_TO_COSMIC = "./Model/COSMIC"
12
  EXTRACTORS_PATH = PATH_TO_COSMIC + "/feature_extraction"
13
  EPIK_MODEL_DIR = PATH_TO_COSMIC + "/erc_training"
 
8
  except LookupError:
9
  nltk.download("punkt")
10
 
11
+ try:
12
+ nltk.data.find("sentiment/vader_lexicon.zip")
13
+ except LookupError:
14
+ nltk.download("vader_lexicon")
15
+
16
  PATH_TO_COSMIC = "./Model/COSMIC"
17
  EXTRACTORS_PATH = PATH_TO_COSMIC + "/feature_extraction"
18
  EPIK_MODEL_DIR = PATH_TO_COSMIC + "/erc_training"
app/cosmic_view.py CHANGED
@@ -11,6 +11,7 @@ from app.utils import (
11
  decode_speaker_role,
12
  display_sentiment_score_table,
13
  sentiment_flow_plot,
 
14
  EXAMPLE_CONVERSATIONS,
15
  )
16
  from fairseq.data.data_utils import collate_tokens
@@ -237,10 +238,45 @@ def cosmic_ui():
237
  plot_btn = gr.Button(value="Plot Sentiment Flow")
238
  plot_btn.click(sentiment_flow_plot, inputs=[output], outputs=[plot_box])
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  # reset all outputs whenever a change in the input is detected
241
  conversation_input.change(
242
- lambda x: ("", None),
243
  conversation_input,
244
- outputs=[output, plot_box],
245
  )
246
  return cosmic_model
 
11
  decode_speaker_role,
12
  display_sentiment_score_table,
13
  sentiment_flow_plot,
14
+ sentiment_intensity_analysis,
15
  EXAMPLE_CONVERSATIONS,
16
  )
17
  from fairseq.data.data_utils import collate_tokens
 
238
  plot_btn = gr.Button(value="Plot Sentiment Flow")
239
  plot_btn.click(sentiment_flow_plot, inputs=[output], outputs=[plot_box])
240
 
241
+ gr.Markdown("# Sentiment Intensity Analysis")
242
+ with gr.Row():
243
+ with gr.Column(scale=1):
244
+ gr.Markdown(
245
+ """
246
+ How accurate is the model? How good are the labels? These are
247
+ some questions that we may have at this point, and we need to
248
+ look at different metrics to assess the performance of our
249
+ models. One of them is sentiment intensity which measures how
250
+ strong a sentiment is expressed in the text.
251
+
252
+ This can be done by using NLTK's `SentimentIntensityAnalyzer`
253
+ which analyzes the connotation of the words in the text and
254
+ suggests whether a text is positive (with score > 0) or negative
255
+ (score < 0) and at what degree the text is positive or negative.
256
+ The graph to the right illustrates the change in sentiment
257
+ intensity of the agent and visitor across the course of the
258
+ conversation.
259
+
260
+ <b><u>Note:</u></b> While NLTK's SentimentIntensityAnalyzer
261
+ offers valuable insights, it is primarily trained on social media
262
+ data like Twitter. Its performance might falter for lengthy or
263
+ intricate messages. However, it remains a useful tool for
264
+ gaining perspective on sentiment in conversations.
265
+ """
266
+ )
267
+ with gr.Column(scale=2):
268
+ intensity_plot = gr.LinePlot()
269
+ intensity_plot_btn = gr.Button(value="Plot Sentiment Intensity")
270
+ intensity_plot_btn.click(
271
+ sentiment_intensity_analysis,
272
+ inputs=[conversation_input],
273
+ outputs=[intensity_plot],
274
+ )
275
+
276
  # reset all outputs whenever a change in the input is detected
277
  conversation_input.change(
278
+ lambda x: ("", None, None),
279
  conversation_input,
280
+ outputs=[output, plot_box, intensity_plot],
281
  )
282
  return cosmic_model
app/deberta_view.py CHANGED
@@ -4,6 +4,7 @@ from app.utils import (
4
  format_prediction_ouptut,
5
  display_sentiment_score_table,
6
  sentiment_flow_plot,
 
7
  EXAMPLE_CONVERSATIONS,
8
  )
9
 
@@ -44,7 +45,7 @@ def deberta_ui():
44
  with gr.Blocks() as deberta_model:
45
  gr.Markdown(
46
  """
47
- # Deberta
48
  Building upon the DeBERTa architecture, the model was customized and
49
  retrained on Epik data to classify messages between Visitors and Agents into
50
  corresponding sentiment labels. At the time of training by the team prior to
@@ -115,10 +116,45 @@ def deberta_ui():
115
  plot_btn = gr.Button(value="Plot Sentiment Flow")
116
  plot_btn.click(sentiment_flow_plot, inputs=[output], outputs=[plot_box])
117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  # reset all outputs whenever a change in the input is detected
119
  conversation_input.change(
120
- lambda x: ("", None),
121
  conversation_input,
122
- outputs=[output, plot_box],
123
  )
124
  return deberta_model
 
4
  format_prediction_ouptut,
5
  display_sentiment_score_table,
6
  sentiment_flow_plot,
7
+ sentiment_intensity_analysis,
8
  EXAMPLE_CONVERSATIONS,
9
  )
10
 
 
45
  with gr.Blocks() as deberta_model:
46
  gr.Markdown(
47
  """
48
+ # DeBERTa
49
  Building upon the DeBERTa architecture, the model was customized and
50
  retrained on Epik data to classify messages between Visitors and Agents into
51
  corresponding sentiment labels. At the time of training by the team prior to
 
116
  plot_btn = gr.Button(value="Plot Sentiment Flow")
117
  plot_btn.click(sentiment_flow_plot, inputs=[output], outputs=[plot_box])
118
 
119
+ gr.Markdown("# Sentiment Intensity Analysis")
120
+ with gr.Row():
121
+ with gr.Column(scale=1):
122
+ gr.Markdown(
123
+ """
124
+ How accurate is the model? How good are the labels? These are
125
+ some questions that we may have at this point, and we need to
126
+ look at different metrics to assess the performance of our
127
+ models. One of them is sentiment intensity which measures how
128
+ strong a sentiment is expressed in the text.
129
+
130
+ This can be done by using NLTK's `SentimentIntensityAnalyzer`
131
+ which analyzes the connotation of the words in the text and
132
+ suggests whether a text is positive (with score > 0) or negative
133
+ (score < 0) and at what degree the text is positive or negative.
134
+ The graph to the right illustrates the change in sentiment
135
+ intensity of the agent and visitor across the course of the
136
+ conversation.
137
+
138
+ <b><u>Note:</u></b> While NLTK's SentimentIntensityAnalyzer
139
+ offers valuable insights, it is primarily trained on social media
140
+ data like Twitter. Its performance might falter for lengthy or
141
+ intricate messages. However, it remains a useful tool for
142
+ gaining perspective on sentiment in conversations.
143
+ """
144
+ )
145
+ with gr.Column(scale=2):
146
+ intensity_plot = gr.LinePlot()
147
+ intensity_plot_btn = gr.Button(value="Plot Sentiment Intensity")
148
+ intensity_plot_btn.click(
149
+ sentiment_intensity_analysis,
150
+ inputs=[conversation_input],
151
+ outputs=[intensity_plot],
152
+ )
153
+
154
  # reset all outputs whenever a change in the input is detected
155
  conversation_input.change(
156
+ lambda x: ("", None, None),
157
  conversation_input,
158
+ outputs=[output, plot_box, intensity_plot],
159
  )
160
  return deberta_model
app/gpt_view.py CHANGED
@@ -9,6 +9,7 @@ from app.utils import (
9
  create_input_instruction,
10
  sentiment_flow_plot,
11
  display_sentiment_score_table,
 
12
  EXAMPLE_CONVERSATIONS,
13
  )
14
 
@@ -339,14 +340,48 @@ def gpt_ui():
339
  plot_box = gr.Plot(label="Analysis Plot")
340
 
341
  plot_btn = gr.Button(value="Plot Sentiment Flow")
342
-
343
  plot_btn.click(sentiment_flow_plot, inputs=[output_box], outputs=[plot_box])
344
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  # reset all outputs whenever a change in the input is detected
346
  conversation_input.change(
347
- lambda x: ("", "", None),
348
  conversation_input,
349
- outputs=[output_box, report_md, plot_box],
350
  )
351
 
352
  return gpt_model
 
9
  create_input_instruction,
10
  sentiment_flow_plot,
11
  display_sentiment_score_table,
12
+ sentiment_intensity_analysis,
13
  EXAMPLE_CONVERSATIONS,
14
  )
15
 
 
340
  plot_box = gr.Plot(label="Analysis Plot")
341
 
342
  plot_btn = gr.Button(value="Plot Sentiment Flow")
 
343
  plot_btn.click(sentiment_flow_plot, inputs=[output_box], outputs=[plot_box])
344
 
345
+ gr.Markdown("# Sentiment Intensity Analysis")
346
+ with gr.Row():
347
+ with gr.Column(scale=1):
348
+ gr.Markdown(
349
+ """
350
+ How accurate is the model? How good are the labels? These are
351
+ some questions that we may have at this point, and we need to
352
+ look at different metrics to assess the performance of our
353
+ models. One of them is sentiment intensity which measures how
354
+ strong a sentiment is expressed in the text.
355
+
356
+ This can be done by using NLTK's `SentimentIntensityAnalyzer`
357
+ which analyzes the connotation of the words in the text and
358
+ suggests whether a text is positive (with score > 0) or negative
359
+ (score < 0) and at what degree the text is positive or negative.
360
+ The graph to the right illustrates the change in sentiment
361
+ intensity of the agent and visitor across the course of the
362
+ conversation.
363
+
364
+ <b><u>Note:</u></b> While NLTK's SentimentIntensityAnalyzer
365
+ offers valuable insights, it is primarily trained on social media
366
+ data like Twitter. Its performance might falter for lengthy or
367
+ intricate messages. However, it remains a useful tool for
368
+ gaining perspective on sentiment in conversations.
369
+ """
370
+ )
371
+ with gr.Column(scale=2):
372
+ intensity_plot = gr.LinePlot()
373
+ intensity_plot_btn = gr.Button(value="Plot Sentiment Intensity")
374
+ intensity_plot_btn.click(
375
+ sentiment_intensity_analysis,
376
+ inputs=[conversation_input],
377
+ outputs=[intensity_plot],
378
+ )
379
+
380
  # reset all outputs whenever a change in the input is detected
381
  conversation_input.change(
382
+ lambda x: ("", "", None, None),
383
  conversation_input,
384
+ outputs=[output_box, report_md, plot_box, intensity_plot],
385
  )
386
 
387
  return gpt_model
app/utils.py CHANGED
@@ -1,8 +1,13 @@
1
- import gradio as gr
2
  import os
3
  import re
 
 
 
4
  import seaborn as sns
 
5
  import matplotlib.pyplot as plt
 
 
6
  from preprocessing.preprocess import decode_numeric_label, decode_speaker_role
7
 
8
 
@@ -107,7 +112,7 @@ def sentiment_flow_plot(labeled_conv):
107
  fig, ax = plt.subplots()
108
  sns.set(style="whitegrid")
109
 
110
- ax.plot(X, visitor_Y_converted, label="Visitor", color="blue", marker="o")
111
  ax.plot(X, agent_Y_converted, label="Agent", color="green", marker="o")
112
 
113
  plt.legend(loc="upper left", bbox_to_anchor=(1, 1))
@@ -123,6 +128,71 @@ def sentiment_flow_plot(labeled_conv):
123
  return fig
124
 
125
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  SENTIMENT_SCORE_TABLE = """
127
  <div align="center" style='font-size: small;'>
128
 
@@ -149,6 +219,6 @@ def display_sentiment_score_table():
149
 
150
  EXAMPLE_CONVERSATIONS = {
151
  "Example 1": "Visitor: Hey Jess, available for outcall tonight?\n\nAgent: hey hey what you looking for luv?\n\nVisitor: Some company in El Segundo\n\nAgent: out with friends or just the two of us?\n\nVisitor: Just the two\n\nAgent: looking for some connection then...\n\nVisitor: Yes\n\nAgent: I get it. Looking for companionship, it's a very legit need. I'll level with you. We're a group of guys trying to show other men the harms of the sex trade industry, both to buyers and sellers. You up for a little conversation? No pressure... no judgement.\n\nVisitor: No, but interested in the harms in companionship?\n\nAgent: The truth is nearly all of the women on these sites are not in this career by choice. We work with survivors. Their money goes to pimps.. their lives are controlled.\n\nVisitor: Really?\n\nVisitor: Even when they say \"independent\"?\n\nAgent: Yes. It's all part of the human trafficking system... pimps find & recruit nearly all women who are doing this, they are very, very good at manipulation and control, and working in the background. Sadly, this modern day slavery will be with us as long as there are willing buyers. That's why we are trying to work this angle. The more men that know the truth, the fewer will want to exploit someone in this way.\n\nAgent: I need to move on, but just consider what I've told you tonight. Polarisproject.org is a great resource to learn more... it's nothing like what Hollywood shows ya. We work with the women & some guys who have escaped out of this lifestyle. It is modern-day slavery, straight up. Thanks for the chat. Good night!\n\nVisitor: Thanks, fyi it worked. Hung it up, I'm to old to me messin around in this crazy stuff take care\n\nAgent: I am so glad to hear this friend. You calling this number tonight was not just a coincidence. Take care also!!\n\n",
152
- "Example 2": "Visitor: What's up sexy\n\nAgent: Thank you! I'm hangin\n\nVisitor: Are you available at the moment\n\nAgent: what's your name\n\nVisitor: David ... Yours\n\nAgent: Dakota is not available right now, but my name is Jeff and I'm working with a bunch of guys trying to curb the demand for victims of human trafficking. Did you ever consider that Dakota could be a victim of trafficking?\n\nVisitor: Fuck no I just wanted to get some pussy .... Bye\n\nAgent: Just so you know your number is in our system now. Understand that next time you click on one of these ads you could be walking into an undercover cop and many of these girls are underage. That is a crime that will follow you the rest of your life!\n\nVisitor: . You think the predators your looking for going to fall into your lap? Lol your not a cop stop trying to be one ... You want to help?\n\nVisitor: Just so you know I don't give no fucks about you or no fucking cops... Threatening me will not get you shit from me ,no info no nothing you stupid cunt..\n\nAgent: Hey man, I did not want to threaten you. I want you to be aware of the risks. Have you heard that most women in prostitution do it against their will, and many are minors?\n\nVisitor: I never fuck with minors that's for sure cause you can tell if they are not of age\n\nAgent: Yeah, many people think it's harmless and these women are in complete control. But, the truth is, most of these women are enslaved, forced to sell themselves by pimps who take 100% of their money. I hope you can see these women in a different light.\n\nVisitor: I know most are blacks living off a woman cause they can't get no job ... I won't see a female if she has a guy around\n\nAgent: I'm curious, is there something missing inside of you, or are you angry about something not right in your life that causes you to seek out connection with these girls?\n\nVisitor: No actually I am on gps monitor and can't go out and meet no one so I got needs and feel sometimes hooking up with one of these girls here and there is w\n\nVisitor: hat works for my situation....but I'm not disrespectful to them or be doing ugly things ... My ex wife cheated on me after 8yrs of marriage I don't reall\n\nVisitor: y trust women like enough for a relationship\n\nVisitor: I'm being honest with you cause even tho I don't know u I believe in doing the right thing and your movement with alot of work is going to save lives so\n\nVisitor: that's good\n\nAgent: Hey David, I'm very sorry for your situation and the pain you must be in. Were you raised with any faith perspective?\n\nVisitor: Yes I actually was baptized for the first time in my life in 2018 and have made some drastic changes to my life.... I'm not perfect but I am working hard\n\nAgent: Okay, David. That's great news. We're all a work in progress. God is faithful to forgive us of our sins if we just ask him. Read 1 John 1:9. Can I direct you to some resources to help you overcome this urge to buy sex?\n\nVisitor: Honestly I'm not ready for that is all I can say at the moment.... Sorry but I don't like to lie\n\nAgent: Hey, no worries. When you're ready, check out www.celebraterecovery.com as they have a lot of resources that might help. I will be praying for you, David. I've had a lot of pain in my life and only in my relationship with Jesus have I found true peace that surpasses my understanding. I pray that for you too.\n\nVisitor: What kinda pain ? Do you mind sharing?\n\nVisitor: And what are y'all doing to put those pieces of shit in prison who are hurting these women\n\nAgent: I've had several people close to me pass away tragically in the past few years. Thanks for asking. I'm just trusting God each day trusting he's in control.\n\nAgent: Hey, honestly, the best way we can solve this problem of evil pieces of shit harming these girls is to dry up the demand for these girls by encouraging men like us to stop calling these ads. If the demand dries up, evil predatory scums' business with die.\n\nAgent: Can I get your commitment to do your part and stop engaging these girls on their escort ads?\n\nVisitor: Yes I will but I can promise you that it will not stop matter of fact it will get worse ... They will beat them more and make them do it more only way is\n\nVisitor: to put the pimps in prison for alot of years....\n\nAgent: Hey, I'll be praying for you. Feel free to call me any time if you need to talk. My number is (615) 628-7545. God bless you, brother.\n\nVisitor: Thank u\n\n",
153
  "Example 3": "Visitor: Heyyy\n\nVisitor: How are you this evening\n\nAgent: better now ;) call me\n\nVisitor: Iam at work for now ,be off around 10pm\n\nVisitor: Need some company\n\nVisitor: Are you independent honey\n\nAgent: well since you arent available at the moment ill just come out and say-these sites are bad news. did you know that most of the girls on here are here against their will? Most of them got dragged into this lifestyle by an abuser, oftentimes before they were of legal consenting age. isnt that sad?\n\nAgent: we are with some guys who are trying to spread awareness of the realities of this \"industry\".\n\nAgent: https://exoduscry.com/choice/\n\nVisitor: Thanks\n\nAgent: i encourage you to watch this video. it is jarring to think about how bad someone else's options must be to choose to be on these sites\n\nVisitor: Ooohhh\n\nAgent: selling their body to make ends meet or appease a pimp\n\nVisitor: That's really awful\n\nAgent: it is. you seem like the kind of guy who wouldnt wont to proliferate that kind of harmful lifestyle. am i right in thinking that?\n\nVisitor: Well iam just looking for attention\n\nVisitor: My marriage is not going well lol\n\nAgent: i know that it is hard to find ourselves lonely and without much alternative to meet that perceived need but its humbling to think that our needs can force someone else into such a dark place\n\nAgent: hey, thanks for sharing that my man. i know it can be hard\n\nAgent: marraige is the most humbling of relationships, isnt it?\n\nVisitor: She leaves with her friends n no time for me\n\nAgent: ive been there my guy. i know that it is alot easier to numb that loneliness for sure\n\nVisitor: I want to be faithful\n\nAgent: does your wife know how you feel when she chooses her friends instead of you?\n\nVisitor: I been drinking lately\n\nVisitor: Yes , she takes pills\n\nAgent: if so, i hope you are praying for her to realize the hurt she is causing and to seek change\n\nVisitor: She had surgery 4 yes ago n it's been hard for her n her addiction on pills\n\nVisitor: Yes for now iam looking for a female friend to talk n see what can we do for each other\n\nAgent: that is hard my man. physical pain is a huge obstacle in life for sure so i hear you\n\nVisitor: Well chat later .thanks\n\nAgent: have you considered pursuing other men who can encourage you instead of looking for the easy way out?\n\nAgent: what is your name my friend? i will be praying for you by name if you wouldnt mind sharing it\n\nAgent: well, i gotta run. watch that video i sent and i will definitely be praying for you. I hope you pray for yourself and for your wife - God can definitely intervene and cause complete change in the situation if He wills it. He is good and He hears you. You are loved by Him, brother. Good night\n\n",
154
  }
 
 
1
  import os
2
  import re
3
+ import nltk
4
+ import gradio as gr
5
+ import pandas as pd
6
  import seaborn as sns
7
+ from statistics import mean
8
  import matplotlib.pyplot as plt
9
+ from nltk.sentiment import SentimentIntensityAnalyzer
10
+ from preprocessing.preprocess import process_user_input
11
  from preprocessing.preprocess import decode_numeric_label, decode_speaker_role
12
 
13
 
 
112
  fig, ax = plt.subplots()
113
  sns.set(style="whitegrid")
114
 
115
+ ax.plot(X, visitor_Y_converted, label="Visitor", color="red", marker="o")
116
  ax.plot(X, agent_Y_converted, label="Agent", color="green", marker="o")
117
 
118
  plt.legend(loc="upper left", bbox_to_anchor=(1, 1))
 
128
  return fig
129
 
130
 
131
+ def sentiment_intensity_analysis(input):
132
+ def analyze_sentiment(text):
133
+ sia = SentimentIntensityAnalyzer()
134
+ scores = [
135
+ sia.polarity_scores(sentence)["compound"]
136
+ for sentence in nltk.sent_tokenize(text)
137
+ ]
138
+ return mean(scores)
139
+
140
+ result = process_user_input(input)
141
+
142
+ if not result["success"]:
143
+ raise gr.Error(result["message"])
144
+
145
+ data = result["data"]
146
+ speakers = [item[1] for item in data]
147
+ messages = [item[2] for item in data]
148
+
149
+ df = pd.DataFrame(columns=["Speaker", "Sentiment Intensity", "Timestamp"])
150
+
151
+ visitor_previous = {
152
+ "Speaker": ["Visitor"],
153
+ "Sentiment Intensity": [0],
154
+ "Timestamp": [0],
155
+ }
156
+ agent_previous = {
157
+ "Speaker": ["Agent"],
158
+ "Sentiment Intensity": [0],
159
+ "Timestamp": [0],
160
+ }
161
+ for i in range(len(messages)):
162
+ new_row = {
163
+ "Speaker": [speakers[i]],
164
+ "Sentiment Intensity": [analyze_sentiment(messages[i])],
165
+ "Timestamp": [i + 1],
166
+ }
167
+ df = pd.concat([df, pd.DataFrame(new_row)], ignore_index=True)
168
+
169
+ # Duplicate the sentiment of the person that does not speak at this duration
170
+ if speakers[i] == "Agent":
171
+ # Agent speak this turn, duplicate the sentiment of the visitor
172
+ visitor_previous["Timestamp"] = [i + 1]
173
+ df = pd.concat([df, pd.DataFrame(visitor_previous)], ignore_index=True)
174
+ agent_previous = new_row
175
+ else:
176
+ # Visitor speak, duplicate the sentiment of the agent
177
+ agent_previous["Timestamp"] = [i + 1]
178
+ df = pd.concat([df, pd.DataFrame(agent_previous)], ignore_index=True)
179
+ visitor_previous = new_row
180
+
181
+ return gr.LinePlot(
182
+ df,
183
+ label="Intensity Plot",
184
+ x="Timestamp",
185
+ y="Sentiment Intensity",
186
+ color="Speaker",
187
+ color_legend_position="right",
188
+ title="Conversation Sentiment Intensity",
189
+ tooltip=["Speaker", "Sentiment Intensity"],
190
+ y_lim=[-1, 1],
191
+ height=400,
192
+ width=400,
193
+ )
194
+
195
+
196
  SENTIMENT_SCORE_TABLE = """
197
  <div align="center" style='font-size: small;'>
198
 
 
219
 
220
  EXAMPLE_CONVERSATIONS = {
221
  "Example 1": "Visitor: Hey Jess, available for outcall tonight?\n\nAgent: hey hey what you looking for luv?\n\nVisitor: Some company in El Segundo\n\nAgent: out with friends or just the two of us?\n\nVisitor: Just the two\n\nAgent: looking for some connection then...\n\nVisitor: Yes\n\nAgent: I get it. Looking for companionship, it's a very legit need. I'll level with you. We're a group of guys trying to show other men the harms of the sex trade industry, both to buyers and sellers. You up for a little conversation? No pressure... no judgement.\n\nVisitor: No, but interested in the harms in companionship?\n\nAgent: The truth is nearly all of the women on these sites are not in this career by choice. We work with survivors. Their money goes to pimps.. their lives are controlled.\n\nVisitor: Really?\n\nVisitor: Even when they say \"independent\"?\n\nAgent: Yes. It's all part of the human trafficking system... pimps find & recruit nearly all women who are doing this, they are very, very good at manipulation and control, and working in the background. Sadly, this modern day slavery will be with us as long as there are willing buyers. That's why we are trying to work this angle. The more men that know the truth, the fewer will want to exploit someone in this way.\n\nAgent: I need to move on, but just consider what I've told you tonight. Polarisproject.org is a great resource to learn more... it's nothing like what Hollywood shows ya. We work with the women & some guys who have escaped out of this lifestyle. It is modern-day slavery, straight up. Thanks for the chat. Good night!\n\nVisitor: Thanks, fyi it worked. Hung it up, I'm to old to me messin around in this crazy stuff take care\n\nAgent: I am so glad to hear this friend. You calling this number tonight was not just a coincidence. Take care also!!\n\n",
222
+ "Example 2": "Visitor: What's up sexy\n\nAgent: Thank you! I'm hangin\n\nVisitor: Are you available at the moment\n\nAgent: what's your name\n\nVisitor: David ... Yours\n\nAgent: Dakota is not available right now, but my name is Jeff and I'm working with a bunch of guys trying to curb the demand for victims of human trafficking. Did you ever consider that Dakota could be a victim of trafficking?\n\nVisitor: Fuck no I just wanted to get some pussy .... Bye\n\nAgent: Just so you know your number is in our system now. Understand that next time you click on one of these ads you could be walking into an undercover cop and many of these girls are underage. That is a crime that will follow you the rest of your life!\n\nVisitor: . You think the predators your looking for going to fall into your lap? Lol your not a cop stop trying to be one ... You want to help?\n\nVisitor: Just so you know I don't give no fucks about you or no fucking cops... Threatening me will not get you shit from me ,no info no nothing you stupid cunt..\n\nAgent: Hey man, I did not want to threaten you. I want you to be aware of the risks. Have you heard that most women in prostitution do it against their will, and many are minors?\n\nVisitor: I never fuck with minors that's for sure cause you can tell if they are not of age\n\nAgent: Yeah, many people think it's harmless and these women are in complete control. But, the truth is, most of these women are enslaved, forced to sell themselves by pimps who take 100% of their money. I hope you can see these women in a different light.\n\nVisitor: I know most are blacks living off a woman cause they can't get no job ... I won't see a female if she has a guy around\n\nAgent: I'm curious, is there something missing inside of you, or are you angry about something not right in your life that causes you to seek out connection with these girls?\n\nVisitor: No actually I am on gps monitor and can't go out and meet no one so I got needs and feel sometimes hooking up with one of these girls here and there is what works for my situation....but I'm not disrespectful to them or be doing ugly things ... My ex wife cheated on me after 8yrs of marriage I don't really trust women like enough for a relationship\n\nVisitor: I'm being honest with you cause even tho I don't know u I believe in doing the right thing and your movement with alot of work is going to save lives so\n\nVisitor: that's good\n\nAgent: Hey David, I'm very sorry for your situation and the pain you must be in. Were you raised with any faith perspective?\n\nVisitor: Yes I actually was baptized for the first time in my life in 2018 and have made some drastic changes to my life.... I'm not perfect but I am working hard\n\nAgent: Okay, David. That's great news. We're all a work in progress. God is faithful to forgive us of our sins if we just ask him. Read 1 John 1:9. Can I direct you to some resources to help you overcome this urge to buy sex?\n\nVisitor: Honestly I'm not ready for that is all I can say at the moment.... Sorry but I don't like to lie\n\nAgent: Hey, no worries. When you're ready, check out www.celebraterecovery.com as they have a lot of resources that might help. I will be praying for you, David. I've had a lot of pain in my life and only in my relationship with Jesus have I found true peace that surpasses my understanding. I pray that for you too.\n\nVisitor: What kinda pain ? Do you mind sharing?\n\nVisitor: And what are y'all doing to put those pieces of shit in prison who are hurting these women\n\nAgent: I've had several people close to me pass away tragically in the past few years. Thanks for asking. I'm just trusting God each day trusting he's in control.\n\nAgent: Hey, honestly, the best way we can solve this problem of evil pieces of shit harming these girls is to dry up the demand for these girls by encouraging men like us to stop calling these ads. If the demand dries up, evil predatory scums' business with die.\n\nAgent: Can I get your commitment to do your part and stop engaging these girls on their escort ads?\n\nVisitor: Yes I will but I can promise you that it will not stop matter of fact it will get worse ... They will beat them more and make them do it more only way is\n\nVisitor: to put the pimps in prison for alot of years....\n\nAgent: Hey, I'll be praying for you. Feel free to call me any time if you need to talk. My number is (615) 628-7545. God bless you, brother.\n\nVisitor: Thank u\n\n",
223
  "Example 3": "Visitor: Heyyy\n\nVisitor: How are you this evening\n\nAgent: better now ;) call me\n\nVisitor: Iam at work for now ,be off around 10pm\n\nVisitor: Need some company\n\nVisitor: Are you independent honey\n\nAgent: well since you arent available at the moment ill just come out and say-these sites are bad news. did you know that most of the girls on here are here against their will? Most of them got dragged into this lifestyle by an abuser, oftentimes before they were of legal consenting age. isnt that sad?\n\nAgent: we are with some guys who are trying to spread awareness of the realities of this \"industry\".\n\nAgent: https://exoduscry.com/choice/\n\nVisitor: Thanks\n\nAgent: i encourage you to watch this video. it is jarring to think about how bad someone else's options must be to choose to be on these sites\n\nVisitor: Ooohhh\n\nAgent: selling their body to make ends meet or appease a pimp\n\nVisitor: That's really awful\n\nAgent: it is. you seem like the kind of guy who wouldnt wont to proliferate that kind of harmful lifestyle. am i right in thinking that?\n\nVisitor: Well iam just looking for attention\n\nVisitor: My marriage is not going well lol\n\nAgent: i know that it is hard to find ourselves lonely and without much alternative to meet that perceived need but its humbling to think that our needs can force someone else into such a dark place\n\nAgent: hey, thanks for sharing that my man. i know it can be hard\n\nAgent: marraige is the most humbling of relationships, isnt it?\n\nVisitor: She leaves with her friends n no time for me\n\nAgent: ive been there my guy. i know that it is alot easier to numb that loneliness for sure\n\nVisitor: I want to be faithful\n\nAgent: does your wife know how you feel when she chooses her friends instead of you?\n\nVisitor: I been drinking lately\n\nVisitor: Yes , she takes pills\n\nAgent: if so, i hope you are praying for her to realize the hurt she is causing and to seek change\n\nVisitor: She had surgery 4 yes ago n it's been hard for her n her addiction on pills\n\nVisitor: Yes for now iam looking for a female friend to talk n see what can we do for each other\n\nAgent: that is hard my man. physical pain is a huge obstacle in life for sure so i hear you\n\nVisitor: Well chat later .thanks\n\nAgent: have you considered pursuing other men who can encourage you instead of looking for the easy way out?\n\nAgent: what is your name my friend? i will be praying for you by name if you wouldnt mind sharing it\n\nAgent: well, i gotta run. watch that video i sent and i will definitely be praying for you. I hope you pray for yourself and for your wife - God can definitely intervene and cause complete change in the situation if He wills it. He is good and He hears you. You are loved by Him, brother. Good night\n\n",
224
  }